全国统一服务热线

173-2023-9721

新闻中心

当前位置:首页>新闻中心

Javascript异步编程方法

Promise

Promise对象曾以多种形式存在于许多语言中。这个词首先被C++工程师用于Xanadu项目,Xanadu项目是Web应用项目的先驱。随后,Promise被用于E编程语言,激发了Python开发者的灵感,实现了Twisted框架的Deferred对象。

Promise在2007年赶上了JavaScript的浪潮,当时Dojo框架刚刚从Twisted框架中汲取灵感,增加了一个叫做dojo.Deferred的对象。那时,相对成熟的Dojo框架和初出茅庐的jQuery框架激烈地争夺着人气和名气。KrisZyp在2009年对dojo.Deferred的影响提出了CommonJS的Promises/A规范。Node.js同年亮相。

future、promise和delay在编程概念中表示相同的概念。把Promise翻译成中文是承诺,也就是说,给你一些东西,我增加以后能做到,但是现在什么都没有了。用来表示异步操作返回的对象,是用来获取未来执行结果的代理,初始值不确定。很多语言都支持Promise。

Promise的核心是它的then方法。我们可以使用这种方法从异步操作中获得返回值或异常。then有两个可选参数(有的实现是三个),分别处理成功和失败的场景。

异步调用doSomethingAync返回Promise对象promise,调用promisethen方法处理成败。这似乎没有太大的改善。还需要回调。但与以前不同的是,首先异步操作有返回值,虽然这个值只是对未来的承诺;其次,通过使用then,程序员可以有效地控制过程的异常处理,并决定如何使用这个来自未来的值。

Promise提供了更方便的流程控制。例如,Promise.all()可以解决几个异步操作的需要并发执行,并在所有操作完成后进行处理。

如果doA失败,其Promise将被拒绝,处理链中的下一个onRejected将被调用。在这个例子中,匿名函数function(error){}。与原来的回调方式相比,不需要每一步都处理异常。这辈子有很多事情。

上述只是对Promise概念的简单陈述,Promise有很多不同规格的建议(A,A+,B,KISS,C,D等),名字(Future,Promise,Defer),以及开源实现。


QQ咨询
在线咨询
在线报名
173-2023-9721
173-2023-9721
返回顶部