gpt4 book ai didi

node.js - 在迭代时使 Node.js 代码在 Mongoose 中同步

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:57 24 4
gpt4 key购买 nike

我正在学习 Node.js;由于 Node.js 的异步,我面临一个问题:

domain.User.find({userName: new RegExp(findtext, 'i')}).sort('-created').skip(skip).limit(limit)
.exec(function(err, result) {

for(var i=0;i<result.length;i++){
console.log("result is ",result[i].id);
var camera=null;
domain.Cameras.count({"userId": result[i].id}, function (err, cameraCount) {
if(result.length-1==i){
configurationHolder.ResponseUtil.responseHandler(res, result, "User List ", false, 200);
}
})
}
})

我想在相机回调中使用结果,但这里它是空数组,所以有办法获取它吗?

而且这段代码是异步的,如果我们把一个完整的函数做成同步的可以吗?

最佳答案

@jmingov 是对的。您应该使用async module执行parallel requests获取 User.find 查询中返回的每个用户的计数。

以下是演示流程:

var Async = require('async'); //At the top of your js file.

domain.User.find({userName: new RegExp(findtext, 'i')}).sort('-created').skip(skip).limit(limit)
.exec(function(err, result) {

var cameraCountFunctions = [];

result.forEach(function(user) {

if (user && user.id)
{
console.log("result is ", user.id);
var camera=null; //What is this for?

cameraCountFunctions.push( function(callback) {

domain.Cameras.count({"userId": user.id}, function (err, cameraCount) {

if (err) return callback(err);

callback(null, cameraCount);
});
});
}
})

Async.parallel(cameraCountFunctions, function (err, cameraCounts) {
console.log(err, cameraCounts);
//CameraCounts is an array with the counts for each user.
//Evaluate and return the results here.
});

});

关于node.js - 在迭代时使 Node.js 代码在 Mongoose 中同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989084/

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