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

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

如何同步一系列承諾?

如何同步一系列承諾?

C++
慕哥9229398 2019-08-03 03:03:00
如何同步一系列承諾?我有一個承諾對象數組,這些對象必須按照數組中列出的相同順序進行解析,也就是說,在解析完前一個元素(作為方法)之前,我們不能嘗試解析一個元素。Promise.all([...]))。如果一個元素被拒絕,我需要鏈立即拒絕,而不試圖解析以下元素。我如何實現這一點,或者是否存在這樣的現有實現?sequence模式?function sequence(arr) {     return new Promise(function (resolve, reject) {         // try resolving all elements in 'arr',         // but strictly one after another;     });}編輯最初的答案表明我們只能sequence這種數組元素的結果,而不是它們的執行,因為它是在這樣的示例中預先定義的。但是,如何產生一系列的承諾,以避免早期執行呢?下面是一個修改過的示例:function sequence(nextPromise) {     // while nextPromise() creates and returns another promise,     // continue resolving it;}我不想把它變成一個單獨的問題,因為我認為這是同一個問題的一部分。解下面的一些答案和隨后的討論有點誤入歧途,但最終的解決方案,正是我所尋求的,是在內部實現的。斯皮克斯圖書館,作為方法序列..該方法可以遍歷動態長度序列,并根據應用程序的業務邏輯創建承諾。后來,我把它變成了一個共享庫,供大家使用。
查看完整描述

3 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

承諾代表價值而不是行動本身。操作是已經開始所以你不能讓他們彼此等待。

相反,您可以同步返回承諾的函數按順序調用它們(例如通過具有承諾鏈的循環),或使用.each方法在藍知更鳥。


查看完整回答
反對 回復 2019-08-04
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

不能簡單地運行X異步操作,然后按順序解析它們。

這樣做的正確方法是,只有在解決之前的一個異步操作之后才運行新的異步操作:

doSomethingAsync().then(function(){
   doSomethingAsync2().then(function(){
       doSomethingAsync3();
       .......
   });});

編輯
似乎您希望等待所有的承諾,然后以特定的順序調用它們的回調。就像這樣:

var callbackArr = [];var promiseArr = [];promiseArr.push(doSomethingAsync());
callbackArr.push(doSomethingAsyncCallback);promiseArr.push(doSomethingAsync1());
callbackArr.push(doSomethingAsync1Callback);.........promiseArr.push(doSomethingAsyncN());
callbackArr.push(doSomethingAsyncNCallback);

然后:

$.when(promiseArr).done(function(promise){
    while(callbackArr.length > 0)
    {
       callbackArr.pop()(promise);
    }});

當一個或多個承諾失敗時,就會出現這樣的問題。




查看完整回答
反對 回復 2019-08-04
  • 3 回答
  • 0 關注
  • 373 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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