私はこの関数を適切なコールバックにしたいと考えています。書かれているように、コールバックは2回呼び出されます.1回は同期 'if'ステートメントと1つは非同期 'test2.save'ステートメントです。私は、私が試した例のようにカウンタコードを入れています。ボトムif文が同期しているので動作しません。私はすでにこのコードの何が間違っているか知っていますが、私はそれをより良くする方法については考えていません。mongodb関数の非同期コールバック
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();
}
}
})
})
};
どのような場合ですか?基本的に何を達成しようとしていますか?私が得ることができるのは、ユーザーのデータベースを持っていて、いくつかのparamに基づいて入力ユーザーを照合しようとしているということです。 –
この関数は、Testコレクションの2人のユーザー間のリンクを作成します。主に関数をテストするためにコールバックが必要です。私は、私のアプリが動作するためのコールバックを必要としないが、これは本当に面白い状況だと思って、それについていくつかの考えを聞きたい。 – Marc
そして達成したいことは?もしuser1がuser2とマッチしなかったら、リンクを保存してください。そうでなければコールバックを返しますか?なぜあなたはtest2.saveからコールバックを呼び出していますか? –