这是我在面试中被问到的一个问题。我知道数组只会返回零,因为这是异步的,但为什么会发生这种情况,以及如何修复它,以便结果数组插入适当的数据?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。代码看起来不错。 –