据我了解,有三种调用异步代码的方法:
- 活动,例如
request.on("event", callback);
- 回调,例如
fs.open(path, flags, mode, callback);
- 承诺
我找到了节点承诺库,但是我不明白。
有人可以解释什么是诺言,为什么我要使用它?
另外,为什么将它从Node.js中删除?
据我了解,有三种调用异步代码的方法:
request.on("event", callback);
fs.open(path, flags, mode, callback);
我找到了节点承诺库,但是我不明白。
有人可以解释什么是诺言,为什么我要使用它?
另外,为什么将它从Node.js中删除?
什么是诺言?
一个promise只是一个代表异步操作结果的对象。一个承诺可以处于以下三种状态中的任何一种:
未决 ::这是初始状态,表示未实现或拒绝承诺。
已实现 ::这表示已实现诺言,表示已准备好使用诺言表示的值。
被拒绝 ::这意味着操作失败,因此无法兑现承诺。除了州,我们还需要了解与承诺相关的三个重要实体
executor function :: executor function定义了需要执行的异步操作,其结果由promise表示。一旦promise对象初始化,它将开始执行。
resolve :: resolve是传递给executor函数的参数,如果执行程序成功运行,则调用此resolve传递结果。
reject :: reject是传递给executor函数的另一个参数,在executor函数失败时使用。失败原因可以传递给拒绝项。
因此,每当我们创建一个Promise对象时,我们都必须提供Executor,Resolve和Reject。
参考:: 承诺
Mike Taulty 拥有一系列视频,每个视频都不到10分钟,描述了WinJS Promise库的工作原理。
这些视频内容丰富,Mike设法通过一些精选的代码示例来展示Promise API的功能。
var twitterUrl = "http://search.twitter.com/search.json?q=windows";
var promise = WinJS.xhr({ url: twitterUrl });
promise = promise.then(
function (xhr) {
},
function (xhr) {
// handle error
});
处理异常的方式特别好。
尽管有WinJs的参考资料,但这还是一个令人感兴趣的视频系列,因为Promise API在其许多实现中大致相似。
RSVP是通过Promise / A +测试套件的轻量级Promise实现。我非常喜欢该API,因为它的样式类似于WinJS接口。
2014年4月更新
顺便说一下,WinJS库现在是开源的。
Promise的另一个优点是,错误处理以及异常引发和捕获比尝试使用回调处理要好得多。
在蓝鸟库实现承诺,并为您提供一流长的堆栈跟踪,速度非常快,并警告有关未被捕获的错误。根据http://bluebirdjs.com/docs/benchmarks.html的介绍,与其他Promise库相比,它还更快,使用的内存更少。
我最近也一直在研究node.js中的promises。到目前为止,由于它的速度和资源使用情况,when.js似乎是可行的方法,但是q.js上的文档使我有了更好的理解。因此,请使用when.js而非q.js文档来理解该主题。
来自github上的q.js自述文件: