2017-11-21 9 views
0

以下約束を返す関数があります。execAsycが有効な場合はエラーをスローします。無効な場合は、次のものに移ります。これを繰り返す方法がありますか?エラーの場合の反復性約束

function performAction() { 
    return Promise.resolve() 
     .then(() => { 
      return execAsync(arrayItem[0]) 
     }) 
     .catch(() => { 
      return execAsync(arrayItem[1]) 
     }) 
     .catch(() => { 
      return execAsync(arrayItem[2]) 
     }) 
} 

答えて

0

Array#reduceを使用すると、あなたを助ける必要があります。

function performAction() { 
    return arrayItem.reduce((prev, item) => { 
     return prev.catch(() => execAsync(item)) 
    }, Promise.reject()) // start out with a rejected promise, so that execAsync is called for the first item in your array 
} 

この関数はexecAsyncは、アレイ内のすべての項目のために失敗した場合は拒否した約束を、返す、または最初の有効なためexecAsyncから結果を解決します項目。