gpt4 book ai didi

javascript - 如何在返回之前等待迭代完成

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:07 25 4
gpt4 key购买 nike

我试图循环遍历 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循环中。它会延迟,并且我只返回一个空数组 responseDataArray = [],因为它在迭代完成之前返回。

我尝试使用Promose persistSingleItemPromise:

let persistSingleItemPromise = function (revData) {

return new Promise(function (resolve, reject) {
revPersSaveRevEntity.revPersSaveRevEntity(revData, function (result) {
resolve(result);
});
});
};

这没有帮助。我该如何解决这个问题?

提前谢谢大家。

最佳答案

我正在考虑这样的事情。

未测试,请告诉我它是否有效;-)

请记住,您的回调也需要异步前缀。

const resultPromise = requestArray['filter'].reduce( async ( accPromise, revEl ) => {
const acc = await accPromise
const result = await persistSingleItemPromise(revEl)
acc.push( result )
return result
}, Promise.resolve( [] ) )

const responseDataArray = await resultPromise

关于javascript - 如何在返回之前等待迭代完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52540225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com