【发布时间】:2018-04-27 15:32:14
【问题描述】:
我有一个从网络服务获取一些信息的函数:
const rxjs = require('rxjs');
const request = require('request');
const moment = require('moment');
function getAvailableGroupClasses() {
return rxjs.Observable.create(observable => {
request(`https://myservice.com/get.json`, (error, response, body) => {
const j = JSON.parse(body);
observable.next(j);
observable.complete();
});
});
}
它返回一个 observable,然后被另一个函数订阅:
function findClassOnDateTime(className, targetDateTime) {
return rxjs.Observable.create(observable => {
getAvailableGroupClasses().subscribe(classes => {
classes.getAllGroupClassesMap
.filter(value => value.nomeAtividade === className) // filter by name
.filter(value => moment(`${value.day} ${value.time}`, 'YYYY-MM-DD HH:mm:ss').isSame(momentTargetDateTime, 'minute')) //filter by class date
.map(values => observable.next(values)) // wrap this in an observable, call here next
});
});
}
最后,façade 会像这样调用findClassOnDateTime:
findClassOnDateTime('classname', moment().day(1 + 7).hour(19).minute(20)).subscribe(values => {
console.log(values);
});
我的问题在于函数 findClassOnDateTime 。它订阅一个 Observable 并创建一个新的来传递值。虽然它正在工作,但我一直在网上阅读 Observables 不应链接或嵌套,但我没有看到任何示例说明何时必须创建 observable 而不仅仅是订阅它。
只是要指出,façade 不应该先调用getAvailableGroupClasses,然后再调用findClassOnDateTime,必须全部在findClassOnDateTime 中完成。
【问题讨论】:
标签: javascript node.js rxjs observable