私は約束オブジェクトを受け入れ、最終的に解決または拒否する前に約束を何回か再生する一般的な "再試行"機能を作成しようとしています。ES6の約束をクローンすることは可能ですか?
約束を受け入れるコードを書いており、1つが成功するか、すべてが失敗するまで順番に働きます。
var first = function(promiseArr){
return promiseArr.reduce(function (prev, next) {
return prev.catch(()=>next)
});
};
first([Promise.reject("1"), Promise.resolve("2"), Promise.reject("3")])
.then(function(data){
console.log('resolved with '+data);
}, function(err){
console.log('rejected with '+err);
});
私は今、約束を受け入れ、約束のディープコピークローンとサイズNの配列を移入する関数を記述しようとしています。私はそれをバニラオブジェクトで動作させることに成功しましたが、私はそれを有望なオブジェクトで動作させることはできません。
私は実行機能を受け入れて自分自身で約束を築くことができたことに気がつきましたが、プロジェクトで既に約束されている機能を再利用できるようにしたいと思います。
var retry = function(promise, maxCount){
return first(Array(maxCount).fill(function(){
//return a deep copy of the promise passed in
})
}
「将来価値」として有望と考えてください。値ではなく、関数です。値を再生することはできません。再試行を実装するには、関数(約束を作成する)またはObservablesを「強力」にする必要があります。 –
渡された約束から実行中の機能を引き出して他のものの構築に使用する方法があるかもしれませんか? –