あなたは、あなたが同時に取り扱い再試行ロジックを心配する必要はありませんし、どのようなロジックを使用してコードをリファクタリングすることができ、あなたのためにPromise()
その自動的チェーンの再試行のためのラッパーを実装することができ。あなたの使い方は次のようになります:以下
sendFile(params, retries = 3) {
return Promise.retry(retries, (resolve, reject) => {
this._sendFile(params).then(resolve, reject)
})
}
をあなたはPromise.retry()
を実装する方法です:
Object.defineProperty(Promise, 'retry', {
configurable: true,
writable: true,
value: function retry (retries, executor) {
console.log(`${retries} retries left!`)
if (typeof retries !== 'number') {
throw new TypeError('retries is not a number')
}
const promise = new Promise(executor)
if (retries > 0) {
return promise.catch(error => Promise.retry(--retries, executor))
}
return promise
}
})
Promise.retry(100, (resolve, reject) => {
// your sendFile core logic with proper
// calls to resolve and reject goes here
const rand = Math.random()
console.log(rand)
if (rand < 0.1) resolve(rand)
else reject(rand)
}).then(
value => console.log(`resolved: ${value}`),
error => console.log(`rejected: ${error}`)
)
あなたはネイティブオブジェクトを拡張不快なら(これは次のようになりますこれは、構成可能で、列挙可能ではなく書き込み可能なプロパティなので)、静的関数として実装することができます。
0123あなたが約束して何かをする必要があり
function retry (retries, executor) {
console.log(`${retries} retries left!`)
if (typeof retries !== 'number') {
throw new TypeError('retries is not a number')
}
const promise = new Promise(executor)
if (retries > 0) {
return promise.catch(error => retry(--retries, executor))
}
return promise
}
は 'this.sendFile(パラメータ、--retries)で返さ' は、代わりにこれを試してみてください: 'this.sendFiles(パラメータ、--retries).resolve(Resolveは、拒否します) ' – Antony
私は約束をやり直す必要があるので、そこに何があったのかを見て、TypeScriptのために何も存在しないことがわかったので、私は自分自身を巻いた。フィードバック歓迎。 https://npmjs.com/package/retry-promise-typescript –