我遇到了编码挑战,这让我很难过:
function runMultipleQueries(queries) {
var results = [];
queries.forEach(doQuery);
return results;
function doQuery(query) {
getData(query)
.then(results.push.bind(results));
}
}
function log(value) {
console.log(value);
}
runMultipleQueries(someArrayOfQueries).forEach(log);
编辑:假设这些功能都在脚本的其他位置定义。
此代码块的假设输出是什么?当承诺归还时,我会感到难过,同时印刷的是什么?我以为我会看到一系列未完成,但现在我不确定!
答案 0 :(得分:2)
同时印刷什么?我以为我会看到一系列UNDEFINED
没有。承诺尚未实现,因此尚未执行push
,并且数组仍为空。这就是为什么没有印刷的原因 - 永远不会。
要获得打印的内容,您需要进行打印,直到完成承诺 - 单独打印(在每个结果可用时打印)或全部一起打印(将结果放入阵列然后打印)。对于后者,你不会自己push
他们,你宁愿使用Promise.all
:
function runMultipleQueries(queries) {
return Promise.all(queries.map(getData));
}
function logArray(results) {
for (var value of results)
console.log(value));
}
runMultipleQueries(someArrayOfQueries).then(logArray);