使用承诺构建对象数组然后发送到客户端的正确方法 - nodejs express



我正在尝试构建一个对象数组并将其发送到客户端。问题是由于异步代码(或者我正在学习(,发送的数组是空白的。

我希望循环构建数组,然后将响应从服务器发送到客户端。我被告知承诺是最好的方法,但我无法理解如何实施。承诺在这里会是什么样子?

var rates = [];
for (var i = 0, len = cryptoxArray.length; i < len; i++) {
  cryptoxArray[i].getRate({
    pair: "XBT_USD"
  }, function(err, rateResponse) {
    if (!err)
      rates.push(rateResponse);
  });
  //I want this last part to wait until the array has been built so 
  //the array is '[object][object]'
  console.log('rates: ' + rates); // now is outputting 'rates: []'
  return res.json(rates);

正如你指定的承诺

Promise.all(cryptoxArray.map(function (cryptox) {
  return new Promise(function (resolve, reject) {
    return cryptox.getRate({ pair: "XBT_USD" }, function (err, rateResponse) {
      return err ? reject(err) : resolve(rateResponse);
    });
  });
})).then(function (rates) {
  return res.json(rates);
});

或在 Ultra ES2015 中

Promise.all(cryptoxArray.map(cryptox =>
    new Promise((resolve, reject) =>
        cryptox.getRate({ pair: "XBT_USD" }, (err, rateResponse) => 
            err ? reject(err) : resolve(rateResponse)
        )
    )
))
.then(rates=> res.json(rates));

最新更新