gpt4 book ai didi

javascript - 无法进入异步(同步)函数/空结果的回调

转载 作者:行者123 更新时间:2023-11-30 12:18:13 24 4
gpt4 key购买 nike

所以我使用的是异步,这个函数将输出一些 id 和计数结果但不是“回调”

    getWaitingGames: function(req,res){
var me = req.session.passport.user;
var rez=[];
console.log("meeeeeeeeee");
console.log(me);
GivenQuestion.find().where({user_id:me}).exec(function(err,data){
var tpm_id = data[0].partie_id;
console.log(tpm_id);
console.log(data);
async.each(data, function(d, callback) {
var parties = [];
if (d.partie_id != tpm_id){
console.log(d.partie_id);
parties.push(d.partie_id);
tpm_id=d.partie_id;
GivenQuestion.count().where({
partie_id: d.partie_id,
user_id: me
}).exec(function(e, countRes) {
console.log(countRes);
if (countRes==2){
rez.push(d.partie_id);
callback();
}
});
}

}, function(err) {
if (err) {
console.log(error);
}
else{
console.log("callback");
res.ok(rez);
}
});
});

},

这是为什么呢?我找不到想要我做错了,似乎与文档中的相同,我以前以相同的方式使用过它

编辑:是的,我可以像你们建议的那样在 if 之后放置回调,但随后我得到一个空的 rez。为什么?async 只工作一个级别吗? (我的意思是,我在 2 .exec() 里面)

最佳答案

代码中有一个小问题。在 async.each 方法的情况下,在作为处理函数的第二个参数中,我们必须调用 callback() 以移动到下一个元素。如果我们不调用 callback() 那么 if 将永远不会失效。

在您的情况下,您仅在 if (countRes==2) 时调用 callback(),但其他情况如何?在其他情况下,async.each()wait for callback() 处理数据中的下一项,但由于我们没有调用 callback() 所以继续等待它.

解决方案:在 if (countRes==2) 之外调用 callback()。请检查下面的代码片段以获取更多详细信息:

GivenQuestion.count().where({
partie_id: d.partie_id,
user_id: me
}).exec(function(e, countRes) {
console.log(countRes);
if (countRes==2){
rez.push(d.partie_id);
}
callback();
});

如果您仍然发现问题,请回复。

关于javascript - 无法进入异步(同步)函数/空结果的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805798/

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