在promise链中将数据推送到新数组的问题

时间:2017-01-09 20:40:26

标签: javascript promise axios

我无法弄清楚为什么我的数据没有被推入我的新阵列,"结果"。 newArr [0] .mscd.g [i]是几个对象的列表。

var axios = require('axios');
var moment = require('moment');
var _ = require('lodash');

var getData = function() {
  return getNBASchedule().then(function(payload) {
      return filterByMonth('January', payload);
  }).then(function(result) {
      return result
  });
}
....

getData从baseURL获取数据并返回对象列表。

var getMonthlySchedule = function(data){
  var results = [];
  var newArr = data.slice(0, data.length);
  for (var i = 0; i <= newArr[0].mscd.g.length; i++) {
    if (newArr[0].mscd.g[i].v.tid === 1610612744 || newArr[0].mscd.g[i].h.tid === 1610612744) {
      results.push(newArr[0].mscd.g[i]); <---- //does not seem to work
      // however if I were to console.log(newArr[0].mscd.g[i], 
      // I would see the list of objects)
    }
  }
  return results; <-- //when i console at this point here, it is blank
};

var getSchedule = function () {
  return getData().then(function(pl) {
    return getMonthlySchedule(pl)
  })
};

var monthlyResults = function() {
  return getSchedule().then(function(r) {
    console.log("result", r)
    return r
  });
};

monthlyResults();

2 个答案:

答案 0 :(得分:1)

除非您在其上使用getSchedule()处理程序,否则您不知道何时完成.then()

getSchedule().then(function(data) {
    // in here results are valid

});
// here results are not yet valid

在异步操作完成之前,您可能正在尝试查看更高范围的results。您必须使用.then(),以便了解操作何时完成且数据有效。

答案 1 :(得分:1)

您的代码应简化如下:

var getData = function() {
    return getNBASchedule().then(function(payload) {
        return filterByMonth('January', payload);
    });
}

var getMonthlySchedule = function(data) {
    return data[0].mscd.g.filter(function(item) {
        return item.v.tid === 1610612744 || item.h.tid === 1610612744;
    });
};

var monthlyResults = function() {
    return getData()
    .then(getMonthlySchedule)
    .then(function(r) {
        console.log('result', r);
        return r;
    });
};

monthlyResults();

这可能会解决问题。如果没有,那么:

  • 检查过滤器测试。也许那些.tid属性是String,而不是Number?
  • 检查data[0].mscd.g是否适合过滤。