【问题标题】:issue with pushing data into a new array while in a promise chain在承诺链中将数据推入新数组的问题
【发布时间】:2017-01-10 19:11:25
【问题描述】:

我无法弄清楚为什么我的数据没有被推送到我的新数组“结果”中。 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();

【问题讨论】:

    标签: javascript promise axios


    【解决方案1】:

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

    getSchedule().then(function(data) {
        // in here results are valid
    
    });
    // here results are not yet valid
    

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

    【讨论】:

    • 嘿@jfriend00,我已经实施了你的建议,但我仍然没有得到结果。我猜我的问题出在我的 getMonthlySchedule 函数中,特别是当我迭代之前的 promise getData(); 给出的数据时;
    【解决方案2】:

    您的代码应简化如下:

    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 属性是字符串,而不是数字?
    • 检查data[0].mscd.g 是否适合过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多