JS中的Promise允许您进行异步编程,如下所示:
DoSomething().then(success, failure);
DoSomethingElse();
每当我编写前面的代码时,它在到达成功之前就到达DoSomethingElse().
那怎么可能? JS是否不是单线程环境(不包括网络工作者)?用setTimeout完成吗?
解决方法:
是的,JavaScript是单线程的,这意味着您永远不应阻塞此单线程.任何长时间运行的等待操作(通常是AJAX调用或睡眠/暂停)都是使用回调实现的.
如果不看实现,就会发生以下情况:
> DoSomething被调用,它接收成功和失败功能作为参数.
>它会执行所需的操作(可能会启动长时间运行的AJAX调用)并返回
> DoSomethingElse()被调用
> …
>一段时间后,AJAX响应到达.它调用先前定义的成功和失败功能
另请参阅(类似问题)
> JavaScript equivalent of SwingUtilities.invokeLater()
> Are there any atomic javascript operations to deal with Ajax’s asynchronous nature?
> jqGrid custom edit rule function using Ajax displays “Custom Function should return array!”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。