将RxJs运算符问题视为
//emit (1,2,3)
const source = Rx.Observable.of(1,2,3);
//start with 0
const example = source.startWith(0);
//output: 0,1,2,3
const subscribe = example.subscribe(val => console.log(val));
现在,我希望 startWith()是Promise的结果。
// - 1
var pr = new Promise((res, rej) => {
setTimeout(() => res(-1), 1000);
});
在“预订”错误块中捕获的承诺错误。
最终输出应类似于
-1, 1, 2, 3
尝试1:我试图兑现诺言,但没有解决。
const example = source.startWith(pr);
尝试2::我尝试使用异步等待,但被try catch块卡住了。
答案 0 :(得分:1)
您可以使用concat()
。在类似情况下对我来说效果很好。
import { concat, of } from 'rxjs';
const promise = new Promise((resolve, reject) => /* process and resolve */);
const observable = of(1, 2, 3).pipe(
/* Pipe whatever operator you need, but don't use `startWith()` */
);
const subscription = concat(promise, observable).subscribe(...);
⚠注意
concat
是从rxjs
(不是rxjs/operators
)导入的。⚠仅在
observable
开始发射后才应用管道。如果您想对诺言应用任何管道,则必须用from
将其包装,如下所示:from(promise)
。
concat
接收现有流(可观察/承诺/可迭代...),并顺序发出它们的值。每个流必须在下一个流开始发射之前完成。
所以...本质上,您获得的信息流是:
concat
上的示例和文档:
欢呼和快乐编码?
答案 1 :(得分:0)
您有两个Observables,source和sourceAdd
const source = Rx.Observable.of(1,2,3);
const sourceAdd;
yourPromise.then(res=>{
sourceAdd=source.pipe(startWith(res));
sourceAdd.subscribe(res=>{
})
}