簡體   English   中英

如何鏈接具有動態長度的Promise函數?

[英]How can I chain Promise functions with dynamic length?

我在數組中有可變的數據計數。 我想要一些東西,這樣做:

function tryThis(num: number): Promise<any> {
  return new Promise ((resolve, reject) => {
    if(num == 3){
      resolve()
    }else{
      reject();
    }
  }
}

let arrayOfSomething : Array<number> = [1,2,3,4];
let chain;

// create the chain
arrayOfSomething.forEach( (element) => {
    // add element to the chain
    chain.catch(() => {
      tryThis(element);
    });
});


// run chain
chain
  .then(() => {
    // one of elemnts of the array was 3
  })
  .catch(() => {
    // no "3" found in array
  })

因此,我的目標是創建一個Promise鏈,形成一個數組,該數組具有可變的數據計數,如果所有tryThis()函數都給出拒絕,則最后捕獲。 如果tryThis()函數之一在鏈中給出了resolve,則跳到最后並使用resolve退出。

我知道,我的代碼不正確,這只是為了展示我想做的事情。

有人可以幫我嗎?

謝謝!

Maybee,您可以使用bluebird的Promise.any或其他庫的類似功能: https : //www.npmjs.com/package/promise.anyhttps://www.npmjs.com/package/promise-any

如果所有元素都被拒絕,則Promise.any被拒絕。 因此,您需要從數字數組中創建承諾數組,然后調用Promise.any 因此,例如:

let arrayOfSomething = [1,2,3,4];
Promise.any(arrayOfSomething.map(x => tryThis(x))
  .then(() => {
    // one of elemnts of the array was 3
  })
  .catch(() => {
    // no "3" found in array
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM