我正在尝试在http get请求之后填充数字数组。我实现了一个应返回此数组的函数,但是当我尝试使用它时,它为空。 我尝试console.log函数内部的数组,并正确地填充了我期望的值,但是它似乎在函数执行后而不是执行期间记录下来。
我不知道如何等到函数填满数组才能正确使用它,您能帮我吗?在其他.then内使用.then方法可以吗?
以下是代码,我对其进行了简化以使其更易于理解:
router.get('/newRail/:trainNumber', function (req, res) {
railsAvailable(req.params.trainNumber).then(function (placing) {
res.json(placing);
// If you read placing at this moment it results empty
});
});
function railsAvailable(trainNumber) {
return Promise.resolve(findBadRail(trainNumber));
}
function findBadRail(trainNumber) {
var badRail = [];
getPlacingByTN(trainNumber).then(placing => {
badRail.push(placing.rail);
getAllPlacings().then(allPlacings => {
allPlacings.forEach(function (p) {
//some computation on the array here...
// .....
// .....
badRail.push(p.rail);
});
console.log(badRail)
});
});
return badRail;
}
function getPlacingByTN(trainNumber) {
// getting from a mongoDb collection
return CollectionDB.findOne({"trainNumberArr": {$eq: trainNumber}}, {});
}
function getAllPlacings() {
// getting from a mongoDb collection
return CollectionDB.find();
}
答案 0 :(得分:0)
findBadRail
将最有可能在getPlacingByTN
解决之前返回……您是否尝试过使用async/await
?
async function findBadRail(trainNumber) {
var badRail = [];
const placing = await getPlacingByTN(trainNumber);
badRail.push(placing.rail);
const allPlacings = await getAllPlacings();
allPlacings.forEach(p => badRail.push(p.rail);
console.log(badRail);
return badRail;
}