【发布时间】:2014-12-31 17:27:56
【问题描述】:
我有这段代码
User.find({}, function(err, users) {
for (var i = 0; i < users.length; i++) {
pseudocode
Friend.find({
'user': curUser._id
}, function(err, friends) * * ANOTHER CALLBACK * * {
for (var i = 0; i < friends.length; i++) {
pseudocode
}
console.log("HERE I'm CHECKING " + curUser);
if (curUser.websiteaccount != "None") {
request.post({
url: 'blah',
formData: blah
}, function(err, httpResponse, body) { * * ANOTHER CALLBACK * *
pseudocode
sendMail(friendResults, curUser);
});
} else {
pseudocode
sendMail(friendResults, curUser);
}
});
console.log("finished friend");
console.log(friendResults);
sleep.sleep(15);
console.log("finished waiting");
console.log(friendResults);
}
});
这里发生了一些异步的事情。对于每个用户,我想找到他们的相关朋友并将他们连接到一个变量。然后我想检查该用户是否有网站帐户,如果有,请发出帖子请求并在那里获取一些信息。唯一的问题是,由于代码没有等待回调完成,所以一切都乱七八糟地发生了。我一直在使用睡眠,但这也不能解决问题,因为它仍然很混乱。
我研究过 async,但这些函数是相互交织的,并不是真正独立的,所以我也不确定它如何与 async 一起工作。
有什么建议可以让这段代码按顺序运行吗?
谢谢!
【问题讨论】:
-
这里有一个类似的问题可能会有所帮助:stackoverflow.com/questions/9644197/…
-
回调的重点是代码不会等待。如果代码等待,则不需要回调。虽然您可以使用“Promise”解决方案,但最好先了解基本问题以及如何在没有抽象的情况下管理它。然后根据需要使用抽象。
标签: javascript node.js asynchronous