在承诺链中将数据推送到新数组的问题
issue with pushing data into a new array while in a promise chain
我无法弄清楚为什么我的数据没有被推送到我的新数组中,"results"。 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 和 returns 对象列表中获取数据。
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();
除非在其上使用 .then()
处理程序,否则您不知道 getSchedule()
何时完成。
getSchedule().then(function(data) {
// in here results are valid
});
// here results are not yet valid
您可能试图在异步操作完成之前查看更高范围的 results
。您必须使用 .then()
以便您知道操作何时完成并且数据有效。
您的代码应简化如下:
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
是否是正确的过滤条件。
我无法弄清楚为什么我的数据没有被推送到我的新数组中,"results"。 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 和 returns 对象列表中获取数据。
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();
除非在其上使用 .then()
处理程序,否则您不知道 getSchedule()
何时完成。
getSchedule().then(function(data) {
// in here results are valid
});
// here results are not yet valid
您可能试图在异步操作完成之前查看更高范围的 results
。您必须使用 .then()
以便您知道操作何时完成并且数据有效。
您的代码应简化如下:
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
是否是正确的过滤条件。