javascript - 在继续下一项之前,如何在 for 循环中为一项运行函数?

标签 javascript node.js callback promise

    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)
      );
    }

上面是我的代码。

我有一个数据库条目“emails”,其中有多个电子邮件地址,分割如下:(0)-> 电子邮件:foo@bar.com,(1)-> 电子邮件:foo1@bar1.com 等。

我想做的是循环访问电子邮件条目中的每封电子邮件,并对该电子邮件进行检查以验证它。但是,我注意到它会在验证模块(client.single.check)完成之前循环到下一个项目,因此会将错误的“x”(项目)推送到我的数据库路径中。如果它在第 0 个项目上,它将推送到我有“x”的数据库路径中的 x=1。

如何才能使 for 循环中的每个项目(电子邮件地址)等待执行电子邮件检查并将结果推送到我的数据库,然后再继续 for 循环中的下一个项目?

所以一直坚持这个。抱歉这个新手问题!

最佳答案

这是因为这里有异步代码。考虑用递归函数替换循环,例如:

function checkAnotherEmail() {
   // Your code
   result => {
       // Success code
       // Detection if there is a next email
       checkAnotherEmail();
   }
}

关于javascript - 在继续下一项之前,如何在 for 循环中为一项运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169394/

相关文章:

Javascript++ 与 +=1

javascript - 为什么 "catch"不处理被拒绝的 promise ?

javascript - Mongoose findOne.populate 范围问题

c++ - 如何使用 C/C++ 创建回调函数

javascript - $ (".class").val() 返回未定义的值

javascript - typescript 多次进口

javascript - ajax POST 是否正确?

javascript - Express app.get 中间件不工作 `SyntaxError: Unexpected end of input`

javascript - 理解回调和相关的词法范围

java - 当具有 2 层时,FrameLayout 无法正确处理触摸请求