0

我想知道是否有可能,以及如何在客户端不按顺序单独运行多个 JavaScript 函数。

如果不可能,是否有解决方法?

4

1 回答 1

4

如果您只是想安排它们以任何顺序运行,那很好,只需这样做(使用setTimeout或其他方式)。如果他们正在做诸如等待 ajax 完成之类的事情,他们将不会相互干扰。但是,如果他们在 JavaScript 代码中工作,他们会在实际运行时保持主 UI 线程忙碌。

如果您需要执行繁重的 JavaScript 处理并希望保持主 UI 线程可用以便 UI 响应,您可以将处理卸载到web worker,它们同时运行在与主 UI 线程不同的线程上。

这是一个简单的网络工作者示例(来自我的回答here):

主JS文件:

function order(number) {
  var w = new Worker("worker.js");
  w.addEventListener("message", function(e) {
    if (e.data && e.data.command == "log") {
      console.log(e.data.message);
    }
    w = null;
  });
  console.log("Queuing order: " + number);
  w.postMessage({command: "go", order: number});
}

function takeOrder(number, cb) {
  console.log("Preparing order: " + number + "");
  cb(number);                                       // Call the callback
}
console.log("Starting to accept order");
for (var i = 0; i < 3; i++) {
  console.log("Taking order: " + i);
  takeOrder(i, order);                              // Pass order as the callback
}
console.log("Job completed!");

worker.js

self.addEventListener("message", function(e) {
  if (e.data && e.data.command == "go") {
    for (var i = 0; i < 1000000000; i++); // kill time
    self.postMessage({command: "log", message: "Order: " + e.data.order + " completed"});
  }
});
于 2017-03-10T15:56:20.223 回答