如何在javascript中实现异步编程(promises)?是不是javascript一个ui-threaded环境?

Ela*_*atz 4 javascript asynchronous promise

JS中的Prom允许您进行异步编程,如下所示:

DoSomething().then(success, failure);

DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)

每当我写完之前的代码,它就会到达DoSomethingElse()之前success.怎么可能?JS不是单线程环境(不包括Web工作者)吗?它完成了setTimeout吗?

Tom*_*icz 5

是的,JavaScript是单线程的,这意味着你永远不应该阻止这个单线程.任何长时间运行的等待操作(通常是AJAX调用或休眠/暂停)都是使用回调实现的.

不看这里的实现是怎么回事:

  1. DoSomething被调用,它接收successfailure充当参数.

  2. 它完成它需要做的事情(可能启动长时间运行的AJAX调用)并返回

  3. DoSomethingElse() 叫做

  4. ...

  5. 一段时间后,AJAX响应到来了.它调用先前定义的successfailure函数

另见(类似问题)

  • @EladKatz:当执行长时间运行的CPU密集型任务(如排序数组或大型DOM操作)时,UI线程被占用并且GUI被阻塞(冻结).没有执行超时,没有处理AJAX响应,也没有调用点击事件处理程序.抱歉. (3认同)