gpt4 book ai didi

javascript - mongodb 函数的异步回调

转载 作者:行者123 更新时间:2023-11-30 21:16:43 24 4
gpt4 key购买 nike

我正在尝试让这个函数进行适当的回调。正如所写,回调将被调用两次 - 一次用于同步“if”语句,一次用于异步“test2.save”语句。我将计数器代码作为我尝试过的示例。它不起作用,因为底部 if 语句是同步的。我已经知道这段代码有什么问题,但我不知道如何让它变得更好。

var postMatches = function(user1, userResults, callback) {
User.find({}, {username: 1, testResults: 1}, (err, users) => {
var counter = 0;
users.forEach(function(user2){
counter++;
if(user1 !== user2.username && user2.testResults !== undefined) {
var test1 = new Test({
username: user1,
match: user2.username,
compatability: mbti[userResults][user2.testResults],
alreadyMatches: false
});

test1.save( () => {
var test2 = new Test({
username: user2.username,
match: user1,
compatability: mbti[user2.testResults][userResults],
alreadyMatches: false
});

test2.save( () => {
if(counter === users.length) {
callback();
}
});
})
} else {

if(counter === users.length) {
callback();
}
}
})
})
};

最佳答案

根据评论和问题,在这里编译了一段代码。使用异步模块和 forEach 函数遍历用户列表并在完成后返回回调。阅读有关 async 和 forEach 的内容。让我知道这是否适用于您的用例。

var async = require('async')
var postMatches = function(user1, userResults, callback) {
User.find({}, {username: 1, testResults: 1}, (err, users) => {
var counter = 0;
async.forEach(users,function(user2,iterate_callback){
if(user1 !== user2.username && user2.testResults !== undefined) {
var test1 = new Test({
username: user1,
match: user2.username,
compatability: mbti[userResults][user2.testResults],
alreadyMatches: false
});

test1.save( () => {
var test2 = new Test({
username: user2.username,
match: user1,
compatability: mbti[user2.testResults][userResults],
alreadyMatches: false
});

test2.save( () => {
iterate_callback();
});
})
} else {
iterate_callback();
}
},function(err){
console.log("Done iterating");
return callback();
});
})
};

关于javascript - mongodb 函数的异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45606322/

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