for (var x = 0; x < emails.length; x++){
var email = emails[x]["email"];
client.single.check(email, true, true).then(
result => {
if (result.getNumericResult() == 0){
console.log("valid email: "+email);
var verified = 1;
admin.database().ref("/users/"+userID+"/emails/"+x+"/verified").set(verified, function(error){
if (error) {
console.log("User ("+userID+") email state could not be saved" + error);
}
console.log("Saved");
});
}
},
err => console.log('ERROR: ' + err.message)
);
}
以上是我的代码。
我有一个数据库条目“电子邮件”,它有多个电子邮件地址,分类如下:(0) - &gt;电子邮件:foo@bar.com,(1) - &gt;电子邮件:foo1@bar1.com等
我要做的是循环浏览电子邮件条目中的每封电子邮件,并对该电子邮件进行检查以验证它。但是,我注意到它将在验证模块(client.single.check)完成之前循环到下一个项目,因此将在我的数据库路径中推送错误的“x”(项目)。如果它在第0个项目上,它将在我有“x”的数据库路径中推送到x = 1.
如何才能使for循环中的每个项目(电子邮件地址)等待进行电子邮件检查并将结果推送到我的数据库,然后再转到for循环中的下一个项目? / p>
所以坚持这个。对不起新手问题!
答案 0 :(得分:0)
这是因为你在这里有异步代码。考虑用递归函数替换你的循环,如:
function checkAnotherEmail() {
// Your code
result => {
// Success code
// Detection if there is a next email
checkAnotherEmail();
}
}