我想构造一个创建并返回Observable
的函数。根据函数接收的参数,它应该创建Observable
并直接返回它,或者(在特殊情况下)在返回Observable
之前调用另一个异步函数。
抽象示例:
async function doSomethingAsync(){
return 'success';
}
function returnObservable(specialCase: boolean): Observable<any>
const observable = new Observable(
observer =>
observer.next(1)
}
);
if(specialCase) {
doSomethingAsync().then(
then => {
// this does not work, of course, but that's what I would like to be able to do
return observable;
}
)
} else {
return observable;
}
}
现在,我的问题是,我似乎无法调用异步函数,然后返回Observable
。我可以使整个returnObservable
函数异步,而仅使await
doSomethingAsync
异步,但是returnObservable
函数将返回Promise
并返回Observable
-那不是我想要的此函数的使用者应直接接收Observable。
我希望我能阐明我的问题。有什么办法可以解决这个问题?
答案 0 :(得分:2)
有什么办法可以解决这个问题?
因为您要返回Observable
,所以可能有。
在returnObservable
函数返回之前,不可能async
同时阻塞。 但是,您可以让它返回一个Observable
,该信号(可选)在异步功能完成之前不会发出任何事件。直到/除非有东西订阅它,您甚至可能甚至不调用异步函数。
隐约可见的东西:
function returnObservable(specialCase: boolean): Observable<any>
const promise = specialCase ? doSomethingAsync() : Promise.resolve();
const observable = new Observable(
observer => {
promise
.then(() => {
observer.next(1);
})
.catch(error => {
// deal with the error
});
}
);
return observable;
}
(您甚至可以使用fromPromise
。可以肯定的是,我对Rx.js不够了解。)
答案 1 :(得分:1)
将诺言转变为可观察的:
application