所以我想擴展Promise以獲得'進度'部分,以便我可以在使用Promise進行異步任務時報告程序。擴展Promise以支持進度報告
因此我伸出無極這樣的:
class promisePro extends Promise {
constructor(fn) {
super(function (resolve, reject) {
fn(resolve, reject, this._progress.bind(this));
});
}
_progress(v) {
if (this.progressCB)
this.progressCB(v);
}
progress(fn) {
this.progressCB = fn;
}
}
,並用它:
function ptest() {
return new promisePro((resolve, reject, progress) => {
setTimeout(() => {
progress(0.3)
}, 1000)
setTimeout(() => {
progress(0.6)
}, 2000)
setTimeout(() => {
progress(0.9)
}, 3000)
setTimeout(() => {
resolve(1)
}, 4000)
})
}
和使用ITT:
ptest().then((r) => {
console.log('finiished: ' + r)
}).progress((p) => {
console.log('progress: ' + p)
})
,並得到這個錯誤:
ptest().then((r) => {
^
TypeError: Promise resolve or reject function is not callable
我在這裏做錯了什麼?
我正在使用節點7.5,更新到8.4。在兩個版本中都有這個錯誤。
謝謝。
也許看看['progress-promise'](https://www.npmjs.com/package/progress-promise)。 – robertklep
@robertklep生病看看,但不是找到一個解決方案,我想知道如何修復我的代碼,即時通訊學習節點/ JS你知道 – ajlajlajl
我建議不要爲此延伸'承諾'的子類。定向進度通知在承諾方式上並不完美,它需要一個單獨的抽象(如鏈接的「progress-promise」包中的'all'和'sequence'自定義方法)。最簡單和最靈活的解決方案是將進度回調傳遞給返回正常承諾的函數。 – Bergi