Damon小站

异步编程的Promise模式

Jul 16, 2016 - 1 minute read - Comments

promise 代表了一个种可能会长时间运行而且不一定必须完成的操作结果。这种模式不会阻塞和等待长时间的操作完成, 而是返回了一个代表承诺的(promised)结果的对象。

promise的模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled),已完成(resolved)和拒绝(rejected)。

promise对象上的then方法负责添加针对已完成和拒绝状态下的处理函数。then方法会返回一个promise对象,已便形成 promise管道(pipeline模式),这种返回promise对象的方法能够支持开发人员把异步操作串联起来。

then(resolvedHandler, rejectedHandler),resolvedHandler回调函数在promise对象进入完成状态时会触发, 并传递结果;rejectedHandler函数会在拒绝状态下调用。

promise对象需要两个方法,用来执行从未完成到已完成和从未完成到拒绝的状态转变。

Promise.prototype.resolve = function(value){
    // move from unfulfilled to resolved
}

Promise.prototype.reject = function(error){
    // move from unfulfilled to rejected
}

当有多个Ajax请求的并发协作的时候,需要when来存储准备调用的promise对象,一旦某个promise从未完成状态 转化为完成或者拒绝状态,then方法里对应的处理函数就会被调用。

Promise.when = function(promised1, promised2, ...){
    // handle promises arguments and queue each.
}

(为何不是在prototype上设置when呢?)

when会有多变种,when.some(), when.all(), when.any()等。

promise使用,必然会使用到pipeline模式,关于pipeline的好处,参考Pipe 之美

本文从 http://www.infoq.com/cn/news/2011/09/js-promise 摘要下来

Tags:

如何进行技术选型 理解REST

comments powered by Disqus