亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Array.prototype.map 中使用 await 來等待

如何在 Array.prototype.map 中使用 await 來等待

qq_遁去的一_1 2022-11-11 14:58:23
如何在 getFooBar 返回 observable 的 map 函數中等待結果?防爆代碼:this.fooBarResponse.fooBars.map(async (x) => {      x.fooBar = await this.fooBarService        .getFooBar(x.fooBarId.toString())        .toPromise();      return x;    });foobar.service.tsgetFooBar(id: string): Observable<FooBar> {    return this.fooBarsCollection.doc<FooBar>(id).valueChanges();}
查看完整描述

2 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

Array#map是同步的。請改用for...of循環。


for(const x of this.fooBarResponse.fooBars){

    x.fooBar = await this.fooBarService

        .getFooBar(x.fooBarId.toString())

        .pipe(take(1))

        .toPromise();

}


查看完整回答
反對 回復 2022-11-11
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

將您的 fooBars 數組減少為一個可觀察到的 switchMap 從一個到下一個


const { of } = rxjs;

const { switchMap, delay } = rxjs.operators;


const fooBarResponse = {

  fooBars: [{ fooBarId: 1 }, { fooBarId: 2 }, { fooBarId: 3 }, { fooBarId: 4 }, { fooBarId: 5 }, { fooBarId: 6 } ,{ fooBarId: 7 } , { fooBarId: 8 }]

}


const fooBarService = {

  getFooBar: x => of(`emitted ${x}`).pipe(delay(500))

};


fooBarResponse.fooBars.reduce(

  (obs$, x) => obs$.pipe(

    switchMap(_ => {

      console.log(`Switching from foobar ${x.fooBarId}`);

      return fooBarService.getFooBar(x.fooBarId.toString());

    })

  ),

  of(null) // start with some random observable

).subscribe(finalEmit => {

  console.log(finalEmit);

});

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.0/rxjs.umd.min.js"></script>


查看完整回答
反對 回復 2022-11-11
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號