【发布时间】:2021-09-30 11:32:09
【问题描述】:
假设我有这样的订阅:
mySubject$.subscribe(async inp => await complexFunction(inp))
假设mySubject$ 是我拥有的主题。我需要一种方法来做到这一点:
await mySubject$.next(inp)
这样我就可以等待complexFunction 完成。
我尝试为此创建一个自定义主题实现,但这似乎并不容易。也许我错过了一些想法,它实际上很简单。
我有什么选择?
更新:
基于 rxjs API 应该接受 Promises 的想法,我尝试了下面的代码。它行不通,所以我又没办法了。
function rigObservable<T>(observable: Observable<T>) {
let resolve;
return {
awaiter: new Promise<void>(res => resolve = res),
observable: observable.pipe(tap(() => resolve()))
};
}
fdescribe('test', () => {
it('should work', async () => {
const subject = new Subject<string>();
const wrapper = rigObservable(subject);
let testValue;
wrapper.observable.subscribe(inp => of(inp).pipe(delay(1000), tap(t => testValue = t)).toPromise());
subject.next('text');
await wrapper.awaiter;
expect(testValue).toEqual('text');
});
});
【问题讨论】:
标签: javascript rxjs