Angular Rx JS startsWith()运算符解析承诺';结果如何?
将RxJs运算符问题视为Angular Rx JS startsWith()运算符解析承诺';结果如何?,angular,rxjs,rxjs6,Angular,Rxjs,Rxjs6,将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()成为承诺的结果 // - 1 var pr = new P
//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()成为承诺的结果
// - 1
var pr = new Promise((res, rej) => {
setTimeout(() => res(-1), 1000);
});
承诺在订阅错误块中捕获错误
最终输出应该如下所示
-1, 1, 2, 3
------------------------------------------------
尝试1:我试着做出承诺,但没有得到解决
const example = source.startWith(pr);
尝试2::我尝试使用async Wait,但被try-catch块卡住了。您有两个可观察对象,source和sourceAdd
const source = Rx.Observable.of(1,2,3);
const sourceAdd;
yourPromise.then(res=>{
sourceAdd=source.pipe(startWith(res));
sourceAdd.subscribe(res=>{
})
}
您可以使用concat()
。在类似的情况下对我很有效
从'rxjs'导入{concat,of};
const promise=新承诺((解决、拒绝)=>/*处理和解决*/);
可观测常数=of(1,2,3)。管道(
/*使用所需的任何操作符,但不要使用“startWith()”*/
);
const subscription=concat(承诺,可观察)。subscription(…);
⚠ 注意concat
是从rxjs
导入的(不是rxjs/operators
)
⚠ 只有observable
开始发射时,才会应用管道。如果您想将任何管道应用到您的承诺中,则必须使用from
将其包装为:from(promise)
TLDR-它是如何工作的?
concat
获取现有流(可观测/承诺/可观测…)并按顺序发送其值。每个流必须在下一个流开始发射之前完成
所以。。。基本上,您得到的流是:
- 解析承诺值
- 一,
- 二,
- 三,
concat
上的示例和文档:
干杯和快乐编码这是完全不清楚的。请给出您期望的输出和您尝试过的内容。更好的是,请提供一份关于您的问题的报告。好吧,您不能用操作员的身份来做这件事。调用.subscribe的
后,流将启动,然后关闭。如果不重新订阅,则无法向其追加新值。@Maryannah,const example=source.startWith(0);在开始处添加一个零。那是可能的。我想要的是添加来自承诺的结果,而不是硬编码的值。不能使用承诺将值附加到流中。您可以从包含所有所需值的承诺创建流。但这将是第二条流,与第一条流不同。我说得够清楚了吗?@Maryannah,是的,你说得够清楚了。现在我想从一个承诺开始。是否有任何可能的解决办法来实现这一点?