【发布时间】:2018-10-01 05:18:42
【问题描述】:
我有一个集合 object_id 的数组,例如 [123, 426, 789] 我需要编写一个 for 循环来从集合中找到该对象到每个对象的某个操作,目前,我正在编码
let obj = ["5acf60d327cca60880b4a257", "5a9e3c642b6b04387208b24c", "5acf60ab27cca60880b4a252"];
for(let i =0; i<=obj.lenth;i++){
if(i=== obj.length){
return callback({
code : 200,
status: 'sucess',
message: "Mail Requested Sucessfully"
});
}else{
user.findbyId(obj[i]).exec((err, userData) => {
if(err){
console.log("user not found");
}else{
transporter.sendMail({
from: '"Fred Foo ????" <foo@example.com>', // sender address
to: userData.emailID, // list of receivers
subject: 'Hello ✔', // Subject line
html: '<b>Hello world?</b>' // html body
}, (error, info) => {
if (error) {
onsole.log('Message sent: %s', error);
}
console.log('Message sent:', info);
});
}
})
}
}
目前,它以异步方式工作,有什么好的方法可以使其以同步方式实现
【问题讨论】:
-
onsole.log('Message sent: %s', error);应该是console.log('Message sent: %s', error);(只是旁注) -
更好:保持您的请求异步,但有序。例如,不是一次启动所有请求,而是让第一个请求的结果回调触发第二个,等等。
-
这是一个看起来很奇怪的代码 :) 您基本上是在循环对象并创建多个异步调用,并且在循环结束时(由 i === obj.length 触发)您正在调用回调... 为什么不在“标准”循环之后立即调用回调,直到
标签: javascript node.js mongodb express asynchronous