【问题标题】:Force the order of the loop execution nodejs强制循环执行nodejs的顺序
【发布时间】:2015-05-25 17:34:32
【问题描述】:
names = ["jack", "matt", "lisa", "jacob"];
names.forEach(function(name) {
    getID(name);
});

循环以随机顺序执行。如何强制按顺序执行:

  1. 名字[0]
  2. 名字[1]
  3. 名字[2]
  4. 名字[3]

【问题讨论】:

  • getID 是什么?你能告诉我们它是如何实现的吗?
  • 我想getID 正在异步执行。然后你应该使用像async 这样的库并使用其中一个串行函数。
  • 检查我的答案并将您的 getID 放入其中。仍然失败吗?¿?¿ 如果仍然失败,您的异步方法将像他们之前所说的那样是 getID
  • 只需使用常规的 for 循环。例如:for(var i; i
  • 循环不是随机执行的。 .forEach() 完全按顺序迭代数组。我猜getID() 是异步的,它以随机顺序完成。您必须向我们展示 getID() 做了什么才能进一步深入研究。

标签: javascript node.js asynchronous foreach


【解决方案1】:

您的forEach() 循环已按照项目在数组中出现的顺序执行,因此您的问题的假设不正确。

你可以很简单地看到:

function log(x) {
  var div = document.createElement("div");
  div.innerText = x;
  document.body.appendChild(div);
}

var names = ["jack", "matt", "lisa", "jacob"];
names.forEach(function(name) {
    log(name);
});

所以,如果您看到有问题,那可能是因为getID() 包含异步操作。因此,您一次启动了四个异步操作,虽然它们是按顺序启动的,但它们不一定按顺序完成。

如果您向我们展示 getID() 的代码并描述您遇到的排序问题,那么我们可能会帮助您弄清楚如何将异步结果排序为正确的顺序。

Promise 是许多人选择的用于帮助管理异步操作顺序的工具,但我们需要查看 getID() 代码才能知道如何更具体地推荐要更改的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2013-11-24
    • 2011-10-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多