在Observable上使用wait时,应该使用什么代替toPromise()?

Jus*_*s10 6 javascript promise rxjs angularfire2 angular

此页面显示"toPromise has been deprecated! (RxJS 5.5+)"但最近我一直在AngularFire2中使用它(当我只想要一个结果时),如下所示:

const foo = await this.afs.doc(`docPath`).valueChanges().toPromise();
Run Code Online (Sandbox Code Playgroud)

我不应该这样做吗?如果没有,那有什么await选择呢?

更新:

在下面的答案之后,我对此进行了更改:

const foo = await this.afs.doc(`docPath`).valueChanges().toPromise();
Run Code Online (Sandbox Code Playgroud)

...对此:

const foo = await (new Promise(resolve => this.afs.doc(`docPath`).valueChanges().pipe(first()).subscribe(result => resolve(result))));
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释这是一种改进吗?似乎向我倒退了一步。

Adr*_*ano 9

您只应该把管子放好!

   .pipe(take(1)).toPromise
Run Code Online (Sandbox Code Playgroud)

  • 不建议弃用`Observable`上的`toPromise`方法:https://github.com/ReactiveX/rxjs/blob/6.2.2/src/internal/Observable.ts#L329-L343 (5认同)
  • 请删除有关不赞成使用“ toPromise”的虚假声明。除了这个答案之外,这无处可寻。 (3认同)
  • 我应该改用`pipe(first())`吗? (2认同)
  • 伙计们,`toPromise()` 在 v7.0 中已被弃用:https://medium.com/javascript-in-plain-english/rxjs-7-in-depth-32cc7bf3e5c (2认同)