Node.js NodeJ在循环结束后查找循环结果的内部查询 var user\u id='98-XXXXXXXX' Contact.find({user\u id:user\u id}) .exec(函数(错误、结果){ 如果(错误){ 返回下一个(错误); } var finalArray=[]; 对于(var i=0;i
EndedHere[]首先出现的是空的,之后我得到了login.find查询的结果,这是正确的。经过所有的计算,你知道如何得到最后的结果吗。Node.js NodeJ在循环结束后查找循环结果的内部查询 var user\u id='98-XXXXXXXX' Contact.find({user\u id:user\u id}) .exec(函数(错误、结果){ 如果(错误){ 返回下一个(错误); } var finalArray=[]; 对于(var i=0;i,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,EndedHere[]首先出现的是空的,之后我得到了login.find查询的结果,这是正确的。经过所有的计算,你知道如何得到最后的结果吗。 提前感谢因为函数在循环中返回承诺,所以代码执行必须等到所有这些承诺都得到解决。考虑使用承诺。所有或承诺。MAP>代码>等待。 如前所述,这样的结构不会返回结果,而是在中间函数或对象完成之前返回它们,因为nodejs不知道应该先等待结果 var user_id = '98-XXXXXXXX' Contact.find({user_id: user_id})
提前感谢因为函数在循环中返回承诺,所以代码执行必须等到所有这些承诺都得到解决。考虑使用<代码>承诺。所有或<代码>承诺。MAP>代码>等待。 如前所述,这样的结构不会返回结果,而是在中间函数或对象完成之前返回它们,因为nodejs不知道应该先等待结果
var user_id = '98-XXXXXXXX'
Contact.find({user_id: user_id})
.exec(function (err, results) {
if (err) {
return next(err);
}
var finalArray = [];
for(var i = 0; i< results[0].Total; i++) {
if(results[0].Contacts[i].name != "SPAM") {
for(var j = 0; j < results[0].Contacts[i].phoneNumbers.length; j++){
var number = results[0].Contacts[i].phoneNumbers[j].number
number = number.replace(/ /g,'');
var user_id = number.substr(number.length - 10);
Login.find({user_id:user_id})
.exec(function(err,results) {
if(err) {
return next(err); }
var intCount = results.length;
if (intCount > 0)
{
console.log('called')
finalArray.push(results[0])
console.log(finalArray)
}
});
}
}
//console.log(i,results[0].Total - 1);
//if(i == results[0].Total - 1)
}
console.log('Ended Here',finalArray)
var responseTosend = {"message":finalArray,"user_id":user_id}
return res.send(responseTosend);
});
我是nodeJS的新手,你能给我一段代码作为参考吗
const x = [1,2,3]
let results = []
for (let i = 0; i < x.length; i++){
results.push(someAsyncJobLikeADatabaseCall(x[i]))
}
// this will not return the results, but the intermediate async objects/functions
console.log(results)
const x = [1,2,3]
let results = []
async function getAsyncResults(array){
// map returns an array, this time, an array of promises
const promises = x.map(number => someAsyncJobLikeADatabaseCall(number))
// Promise.all resolves, if all promises in the array have been resolved
return Promise.all(promises)
}
try {
let results = await getAsyncResults(x)
// this will return the results you expect.
console.log(results)
} catch (err) {
console.log('Some error', err)
}