我正在經歷雄辯的JavaScript並且必須實現promise.all。這是我的解決方案。promise.all的JavaScript實現不工作?
function all(promises) {
return new Promise(function(success, fail) {
var results = [];
var failed = false;
promises.forEach(function(promise) {
promise.then(function(result) {
results.push(result);
}, function (error) {
failed = true;
fail(error);
});
});
if (!failed)
success(results);
});
}
下面是我正在運行它的測試。
// Test code.
all([]).then(function(array) {
console.log("This should be []:", array);
});
function soon(val) {
return new Promise(function(success) {
setTimeout(function() { success(val); },
Math.random() * 500);
});
}
all([soon(1), soon(2), soon(3)]).then(function(array) {
console.log("This should be [1, 2, 3]:", array);
});
function fail() {
return new Promise(function(success, fail) {
fail(new Error("boom"));
});
}
all([soon(1), fail(), soon(3)]).then(function(array) {
console.log("We should not get here");
}, function(error) {
if (error.message != "boom")
console.log("Unexpected failure:", error);
});
我的代碼顯然是錯誤的監守它的輸出
這應該是[] []
這應該是[1,2,3]:[]
我們應該不在這裏
第一個是唯一正確的。 實際的解決方案,它是從我的缺陷觀爲我寫的作品,並可以在這裏找到基本相同: http://eloquentjavascript.net/code/#17.2
爲什麼我的代碼不能正常工作?它出什麼問題了?
@AliTorabi不要是個混蛋。有時重新發明輪子以更好地理解編程和您正在使用的語言是很重要的。 –
@AliTorabi作爲一種學習練習,我相信重新實現常用功能以更好地理解它們是一件好事。我的理解是,這是OP的目標。 – Timo
我不再是混蛋。處理代碼和問題 –