這是我在面試中被問到的一個問題。我知道數組只會返回零,因爲這是異步的,但爲什麼會發生這種情況,以及如何修復它,以便結果數組插入適當的數據?Javascript承諾面試
問題:假設findData是一個函數,它接受查詢對象並返回查詢結果的承諾。還假設someRandomArrayOfQueries是一個查詢對象數組。解釋什麼會通過下面的代碼,爲什麼被打印:
function runMultipleQueries(queries) {
var results = [];
queries.forEach(doQuery);
return results;
function doQuery(query) {
findData(query)
.then(results.push.bind(results));
}
}
function log(value) {
console.log(value);
}
runMultipleQueries(someRandomArrayOfQueries).forEach(log);
您確定這是_vanilla JavaScript_? –
你需要閱讀關於異步過程的JavaScript。這裏重要的是你不知道時間將花費findData。這個承諾不會阻止這個過程。一個承諾只是一個承諾,當他有數據時,他會執行內部的代碼,或者內部錯誤。返回函數將在之前執行,因爲javascript過程繼續執行代碼。 –
@PaulS。代碼看起來不錯。 –