【问题标题】:Javascript: How to write a function that will be executed asynchronously?Javascript:如何编写一个异步执行的函数?
【发布时间】:2012-03-08 08:51:06
【问题描述】:

我有几行代码我想在 Javascript 中异步运行,这样它就不会减慢我的主要算法。看到这个伪代码:

//main algorithm with critical code that should run as soon as possible
...
...
runInParallel(function(){
  //time consuming unimportant code to shows some progress feedback to user
  ...
}
//the rest of the time critical algorithm
...
...
runInParallel(function(){
  //time consuming unimportant code to shows some progress feedback to user
  ...
}
//and so on and so forth

我在 Stackoverflow 上搜索了如何用 Javascript 编写异步代码,但以下问题与我的不同:

我想我可以为此使用计时器。我想要的只是函数 runInParallel() 的主体,它与我的主算法并行有效地运行代码,如果可能的话,优先级较低。有人吗?

【问题讨论】:

  • 优先级较低?我怀疑有没有这样的方法

标签: javascript multithreading asynchronous web-worker


【解决方案1】:

Javascript 没有同步/线程管理。如果您希望异步执行某些操作,您可以使用 setTimeout 结合回调,以便在函数完成时收到通知。

 var asyncHandle = setTimeout(function () { asyncCode(); callback(); }, 10);

asyncHandle 可用于在调用函数之前取消超时。

【讨论】:

  • 这些方法已经过时了,从引入网络工作者开始(见我的帖子)。
  • 我不同意。为什么要限制对支持 HTML 5 的客户端的支持?
  • 人们可能会争论采用 Web 标准作为强制浏览器供应商接受的手段,但这是另一个完全不同的问题..
  • 我同意必须给予一些东西,但大多数网络都不是 HTML 5,所以最后,我猜你会通过限制其受众而不是强制执行来伤害你的应用一些标准。
  • 我们对运行时环境有严格的控制,我们在那里有 HTML5。但我认为 Web Workers 对于我们目前遇到的问题来说太大了。现在我认为这个 setTimeout() 可以完成这项工作。但是,我同意如果我们的问题扩大,Web Workers 可能是最终的答案。
【解决方案2】:

如果您的目标是支持 HTML5 的浏览器,请使用 HTML5 Web Workers

您也可以尝试这个有趣但相当古老的JavaScript compiler,它允许为此目的进行语言扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多