Angular Rx JS startsWith()运算符解析承诺';结果如何?

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

将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 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,是的,你说得够清楚了。现在我想从一个承诺开始。是否有任何可能的解决办法来实现这一点?