Node.js 如何使用async Wait with promise获得我的结果?
我有一个函数应该返回一个结果 我有一个数组,在这个数组上我做了一个foreach,我用一个函数从数据库中获取数据,该函数对数组上的每个id都有承诺, 调用最后一个函数时,我使用async await,但在执行函数之前返回最终结果 控制器用户 我收到一个空结果,在控制台中,我有成功返回调用后显示的结果Node.js 如何使用async Wait with promise获得我的结果?,node.js,foreach,promise,async-await,synchronous,Node.js,Foreach,Promise,Async Await,Synchronous,我有一个函数应该返回一个结果 我有一个数组,在这个数组上我做了一个foreach,我用一个函数从数据库中获取数据,该函数对数组上的每个id都有承诺, 调用最后一个函数时,我使用async await,但在执行函数之前返回最终结果 控制器用户 我收到一个空结果,在控制台中,我有成功返回调用后显示的结果 { "success": true, "data": [] } 如何获得结果?将foreach循环更改为for循环,并按预期工作 myFunction: function (req
{
"success": true,
"data": []
}
如何获得结果?将foreach循环更改为for循环,并按预期工作
myFunction: function (req, res) {
let headerAuth = req.headers['authorization'];
let login = utils.getUser(headerAuth);
if (login) {
//some function to get data from database
ModelUsers.getData(login, async function (err1, result) {
if (!err1) {
let data = [];
for (let index = 0; index < result.length; index++) {
const element = result[index];
let dataxx = await ModelUsers.getDataWithPromise(r._id);
data.push(dataxx);
}
res.json({ success: true, data: data })
}
})
}
将foreach循环更改为for循环,并按预期工作
myFunction: function (req, res) {
let headerAuth = req.headers['authorization'];
let login = utils.getUser(headerAuth);
if (login) {
//some function to get data from database
ModelUsers.getData(login, async function (err1, result) {
if (!err1) {
let data = [];
for (let index = 0; index < result.length; index++) {
const element = result[index];
let dataxx = await ModelUsers.getDataWithPromise(r._id);
data.push(dataxx);
}
res.json({ success: true, data: data })
}
})
}
您可以通过以下两种方式修复此问题: 如果登录{ //从数据库中获取数据的一些函数 ModelUsers.getDatalogin,函数err1,结果{ 如果!错误1{ 让数据=[]; result.forEachasync函数,idx{ //带承诺的功能,请参见下一步 让dataxx=等待ModelUsers.getDataWithPromiser.\u id; data.pushdataxx; console.log**dataxx:,dataxx 如果result.length==idx+1{ res.json{ 成功:没错, 数据:数据 } } } } }
} 您可以通过以下两种方式修复此问题: 如果登录{ //从数据库中获取数据的一些函数 ModelUsers.getDatalogin,函数err1,结果{ 如果!错误1{ 让数据=[]; result.forEachasync函数,idx{ //带承诺的功能,请参见下一步 让dataxx=等待ModelUsers.getDataWithPromiser.\u id; data.pushdataxx; console.log**dataxx:,dataxx 如果result.length==idx+1{ res.json{ 成功:没错, 数据:数据 } } } } } } forEach是异步的。for或for of循环是同步的,在这种情况下可以使用for of循环。我增加了一个例子。注意getData回调中的async关键字
myFunction: function(req, res) {
let headerAuth = req.headers['authorization'];
let login = utils.getUser(headerAuth);
if (login) {
//some function to get data from database
ModelUsers.getData(login, async function(err1, result) {
if (!err1) {
let data = [];
for (let user of result) {
let dataxx = await ModelUsers.getDataWithPromise(r._id);
data.push(dataxx);
}
res.json({ success: true, data: data })
}
})
}
}
forEach是异步的。for或for of循环是同步的,在这种情况下可以使用for of循环。我增加了一个例子。注意getData回调中的async关键字
myFunction: function(req, res) {
let headerAuth = req.headers['authorization'];
let login = utils.getUser(headerAuth);
if (login) {
//some function to get data from database
ModelUsers.getData(login, async function(err1, result) {
if (!err1) {
let data = [];
for (let user of result) {
let dataxx = await ModelUsers.getDataWithPromise(r._id);
data.push(dataxx);
}
res.json({ success: true, data: data })
}
})
}
}
forEach方法不支持异步函数。您可以使用Array.map将每个值转换为承诺,然后等待它们完成承诺。全部:
forEach方法不支持异步函数。您可以使用Array.map将每个值转换为承诺,然后等待它们完成承诺。全部:
探险家:你说ForEach是同步的,但是我们需要它来同步这个问题,对吗?如果它是异步的,那么我们应该有当前的问题Explorer:你说ForEach是同步的,但是我们需要它在这个问题上是同步的,对吗?如果它是异步的,那么我们应该有当前的问题谢谢你的回复,我使用map with promise all是新的,但是我有一些其他代码,我必须使用循环谢谢你的回复,我使用map with promise all是新的,但是我有一些其他代码,如果我删除async Wait,我也必须使用循环,我有结果,为什么?如果我删除async Wait,我有结果,为什么?
ModelUsers.getData(login, async function (err1, result) {
if (!err1) {
const data = await Promise.all(result.map(({_id}) => ModelUsers.getDataWithPromise(_id)))
res.json({success: true, data})
}
})