當我們需要處理多個異步調用時,應該如何處理呢?
//首先假設有2個讀取文件的異步調用,promise1和promise2
var promise1 = readFile ("foo.txt", "utf-8");
var promise2 = readFile ("bar.txt", "uft-8");//然后,我們可以使用all()方法將兩個單獨的Promise重寫抽象組合成一個新的Promise,并用then暴露給Deferred
var deferred = new Deferred();
deferred.all([promise1, promise2]).then(function (result) {// 正確情況下做什么
}, function (err) {// 錯誤了做什么
});// 最后利用prototype重寫Deffered的all()方法;
Deferred.prototype.all = function (promises) {var count = promises.length;var that = this;var results = [];promises.forEach(function (promise, i) {promise.then(function (data) {count--;results[i] = data;if (count === 0) {that.resolve(results);}}, function (err) {that.reject(err);});});return this.promise;
};
詳情參考《深入淺出NODE》P88