假設我想要一個隊列,其中任何時候只異步處理 3 個項目,我該怎么做?這就是我的意思:如果我有一組項目要上傳到后端,即將一些人工制品上傳到云存儲,然后創建/更新一個文檔以反映每個人工制品的 url,我不想:在下一次之前異步/等待每個上傳操作 - 因為這會很慢同時發送所有內容 - 這可能導致寫入熱點或速率限制做一個 promise.race - 這最終導致(2)做一個 promise.all - 如果有一個長時間運行的上傳,這個過程會變慢。我想做的是:有一個所有上傳的隊列,比如使用 RxJs 創建方法,例如from(array-of-upload-items)在任何時候處理 3 個項目的堆棧。當一個項目離開堆棧即完成時,我們將一個新項目添加到隊列中確保在任何一點,堆棧中始終有 3 個項目正在處理,直到隊列中沒有更多項目等待放入堆棧。我將如何使用 RxJs 來解決這個問題?編輯:2020 年 6 月 27 日這就是我的想法:const rxQueue = from(filesArray) // this is the list of files to upload say like 25 files or so rxQueue .pipe( mergeMap((item) => of(item).pipe( tap(async (item) => { await Promise.race([ processUpload(item[0]), processUpload(item[1]), processUpload(item[2]), ]) }), ), 3 ), ) .subscribe()目標是確保在任何時候都處理(上傳)3 個文件,以至于如果一個文件上傳過程結束,則添加另一個文件以將堆棧保持在 3 個上傳過程中。同理,如果 2 個文件上傳同時結束,則將 2 個新文件添加到堆棧中,依此類推,直到文件數組中的所有文件都上傳完畢。
在 RxJs 中實現具有固定堆棧的排隊系統
慕標5832272
2022-10-21 15:01:44