NodeJS async / await:为什么我的Array在async / await回调中变为1?

时间:2017-07-26 20:13:22

标签: arrays node.js callback async-await

标题中的问题非常简单......我不知道发生了什么。 我有一个promise,然后是一个async / await函数来回调promise中的值,但是没有得到正确的值,promise中生成的Array变成了普通的'1'。

这是我的代码:

    var async = require('async');
    var request = require('request');
    var _ = require('underscore');

    var getTickerList = new Promise((resolve, reject) => {
      var tickerArr = [];
      request({
        url: 'https://api.kraken.com/0/public/AssetPairs',
        json: true
      }, (error, response, body) => {

        var jsonObject = body;
        _.map(jsonObject, function(content) {
          _.map(content, function(data) {
            if (data.altname.indexOf('EUR') !== -1 || data.altname.indexOf('USD') !== -1)
              resolve(tickerArr.push(data.altname));
              // resolve(tickerArr = [1, 2, 3, 4, 5, 6]);
          });
        });
        console.log(tickerArr);
      })
    });


    async function exec() {
      var tickerList = await getTickerList;
      debugger;
      console.log(tickerList);
    }

exec()

我试图避免对请求进行操作的所有函数并简单地解决(tickerArr = [1,2,3,4,5,6]并且它显示正确所以我猜它是_.map操作的某些部分正在弄乱这个过程,但是如何?在哪里?

var async = require('async');
var request = require('request');
var _ = require('underscore');

var getTickerList = new Promise((resolve, reject) => {
  var tickerArr = [];
  request({
    url: 'https://api.kraken.com/0/public/AssetPairs',
    json: true
  }, (error, response, body) => {

    // var jsonObject = body;
    // _.map(jsonObject, function(content) {
    //   _.map(content, function(data) {
    //     if (data.altname.indexOf('EUR') !== -1 || data.altname.indexOf('USD') !== -1)
    //       resolve(tickerArr.push(data.altname));
          resolve(tickerArr = [1, 2, 3, 4, 5, 6]);
    //   });
    // });
    console.log(tickerArr);
  })
});


async function exec() {
  var tickerList = await getTickerList;
  debugger;
  console.log(tickerList);
}

知道这里发生了什么吗?最后,我将把这个承诺导出到一个主要版本,它仍将作为一个模块......

提前致谢!

1 个答案:

答案 0 :(得分:2)

Array#push()在追加函数调用参数中提供的值后返回数组的length not 返回修改后的数组。您的第一个resolve()是获得await'的唯一length,并且由于在推送第一个元素后1将为Car::update(['created_by' => 10, 'updated_by' => 15]); ,因此该值将被解析。< / p>