【问题标题】:How to run for in loop synchrously in node js如何在节点js中同步运行for in循环
【发布时间】:2018-01-18 15:04:22
【问题描述】:

我正在运行一个 for in 循环并在 for in 循环内调用一个 REST API。所以假设 userArray 包含 5 个用户,然后 API 被调用一次,打招呼五次。那么如何在循环内运行 API 调用 5 次在节点js中

for(user in userArray){
   var result=apiddetails.getuserdetails(user);
   console.log(result);
   console.log("hello"); 
}

【问题讨论】:

  • 您应该在 API 调用之间等待。
  • 你真的需要使用for in循环吗?你真的需要称之为同步吗?你可以做这样的事情const results = Promise.all(userArray.map(apiddetails.getuserdetails))
  • 是的,虽然我不想使用 setTimeInterval ,但我想要一个健壮的几行代码 Promise.all ,这有助于在我的项目中修改几行代码

标签: javascript node.js mean-stack


【解决方案1】:

这是使用 promises 的解决方案。

var promises = [];
for(user in userArray){
   var promises.push[apiddetails.getuserdetails(user)]; //asumming you are returning promise from this function 
}
Promise.all(promises).then(function(values) {
console.log(values);
});

【讨论】:

  • 这个解决方案虽然正确,但我改变了回复的顺序,不是吗?
  • 没有第一个调用值将位于 values[0] 位置,第二个调用值将位于 values[1] 等等
  • 是的,我 found 它:“无论完成顺序如何,返回值将按照 Promise 传递的顺序。”
【解决方案2】:

您可以尝试使用 async-await

for(user in userArray){
   var result = (async function(){
      return await apiddetails.getuserdetails(user);
   })(user); //pass user as the argument
   console.log(result);
   console.log("hello"); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多