【发布时间】:2019-07-27 11:08:30
【问题描述】:
假设我有这个 observable:
const obs = new Observable((observer) => {
observer.next(0.25);
observer.next(0.75);
observer.next(new ArrayBuffer(100));
observer.complete();
});
我怎样才能等待每个带有承诺的值?
下面的代码只会返回最后一个值(调用完成之前的值):
const value = await obs.toPromise();
但我希望能够在此过程中获得每个值。我可以这样做:
const value1 = await obs.pipe(take(1)).toPromise();
const value2 = await obs.pipe(take(2)).toPromise();
但这并不理想,因为我必须每次都增加数字,而且take(1000) 仍然会在示例中返回一些内容,即使只有 3 个值。我正在寻找类似的东西:
const value1 = await obs.pipe(next()).toPromise(); // 0.25
const value2 = await obs.pipe(next()).toPromise(); // 0.75
const value3 = await obs.pipe(next()).toPromise(); // ArrayBuffer(100)
const value4 = await obs.pipe(next()).toPromise(); // null
这更类似于生成器。
有没有办法完成这样的事情?
【问题讨论】:
-
为什么这需要成为一个承诺?
-
@KevinB 为什么不呢?我想用 async/await 来构建我的代码。
-
是的,但是,它看起来好像你在做任何异步的事情,所以......理论上无论有没有等待,它都会以相同的方式工作。如果您正在做的事情不是异步的,那么 async/await 将只是没有目的的额外代码。
-
这只是一个简化的例子,请想象 observable 以异步方式发出事件。
-
@maximedupre 有一个关于converting Observable into generator 的问题,您可以尝试提供答案。虽然我仍然不确定将异步与 Observables 一起使用的大想法是否有效。
标签: javascript promise rxjs observable rxjs6