如果响应仍处于未决状态,则承诺的价值是多少?

时间:2017-08-30 00:11:59

标签: javascript promise

我遇到了编码挑战,这让我很难过:

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);

编辑:假设这些功能都在脚本的其他位置定义。

此代码块的假设输出是什么?当承诺归还时,我会感到难过,同时印刷的是什么?我以为我会看到一系列未完成,但现在我不确定!

1 个答案:

答案 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);