【发布时间】:2019-03-03 13:25:55
【问题描述】:
我正在尝试遍历 JSON 对象数组(var requestArray = req.body;,特别是 requestArray['filter']),将每个对象保存到数据库中。每次持久化后,我都会拉出最后一个持久化数据表,将其添加到responseDataArray.push(result); 中的数组let responseDataArray = [];。然后将该数组作为请求响应返回。
app.post('/sound', function (req, res) {
var requestArray = req.body;
let responseDataArray = [];
for (var i = 0; i < requestArray['filter'].length; i++) {
if (i > 3)
break;
var revEl = requestArray['filter'][i];
// console.log('GUID >>> ' + i + ' : ' + revEl['_revEntityGUID'] + ' >>> ' + JSON.stringify(revEl));
persistSingleItemPromise(revEl).then(function (result) {
responseDataArray.push(result);
console.log(JSON.stringify(responseDataArray));
});
}
console.log((responseDataArray));
res.send(responseDataArray);
});
问题出在for loop。它延迟,我只返回一个空数组responseDataArray = [],因为它在迭代完成之前返回。
我尝试过使用Promose persistSingleItemPromise:
let persistSingleItemPromise = function (revData) {
return new Promise(function (resolve, reject) {
revPersSaveRevEntity.revPersSaveRevEntity(revData, function (result) {
resolve(result);
});
});
};
这没有帮助。我该如何解决这个问题?
提前谢谢大家。
【问题讨论】:
-
我认为您可能需要返回
resolved结果。你可以在persistSingleItemPromise中尝试return resolve(result);吗? -
我认为你可以使用 reduce 并使用 promise 作为累加器,不幸的是我现在没有时间给你写一个例子。如果没有答案,我会稍后再回答。
-
看看async/await
-
您的代码似乎正确,所以我猜这是您的
revPersSaveRevEntity函数的问题。您是否检查过它是否提供了正确的结果?只需在resolve(result);之前使用console.log(result)
标签: javascript arrays node.js promise iteration