RxJs主体将第一个发出的值解析为承诺

RxJs主体将第一个发出的值解析为承诺,rxjs,Rxjs,有没有办法通过使用toPromise()方法等待主题或BehviourSubject中发出的值? 我试过使用first()操作符,以及take(1)操作符,但似乎没有像我预期的那样工作。 以下内容与我的问题类似: async function testSubjectToPromise() { const sub = new Subject<string>(); sub.next("Hello"); const response = sub.toProm

有没有办法通过使用
toPromise()
方法等待
主题或
BehviourSubject
中发出的值? 我试过使用
first()
操作符,以及
take(1)
操作符,但似乎没有像我预期的那样工作。 以下内容与我的问题类似:

async function testSubjectToPromise() {
  const sub = new Subject<string>();
  sub.next("Hello");
  const response = sub.toPromise();
  console.log("Task added");
  const result = await response;
  console.log("Task completed");
}

testSubjectToPromise().finally(() => console.log("Done"));
异步函数testSubjectToPromise(){
const sub=新主题();
sub.next(“你好”);
const response=sub.toPromise();
控制台日志(“添加任务”);
const result=等待响应;
console.log(“任务完成”);
}
testSubjectToPromise().finally(()=>console.log(“完成”);

您应该以更合乎逻辑的方式使用它:

const sub = new Subject<string>();
async function testSubjectToPromise() {
  console.log("Task added");
  const result = await sub.pipe(first()).toPromise();
  console.log("Task completed");
  return result;
}

testSubjectToPromise().then(x => console.log(x)).finally(() => console.log("Done"));
sub.next("Hello");
async function testSubjectToPromise() {
  const sub = new ReplaySubject<string>();
  console.log("Task added");
  sub.next("Hello");  
  const result = await sub.pipe(first()).toPromise();
  console.log("Task completed");
  return result;
}

testSubjectToPromise().then(x => console.log(x)).finally(() => console.log("Done"));