promises/A+协议的实现模块【q】使用心得

首先参考这篇promises/A+协议的文章,搞明白什么是promise,reject,fulfill,resolve的概念。

然后下载promises/A+的实现:npm install q

下面是是一个使用q的简单例子:

var q = require("q");
var defer = q.defer();

function add(i) {
	console.log(++i);
	return i;
}

defer.promise.then(add).then(add);

defer.resolve(0);

这个例子中只有一个promise对象,i值会随着被解决依次向下传递,控制台会依次打印:1 2

实际上面的例子的执行如下:

var q = require("q");
var defer = q.defer();

function add(i) {
	console.log(++i);
	return i;
}

var promise = defer.promise
promise = promise.then(add);
promise = promise.then(add);

defer.resolve(0);

再看下面的例子:

var q = require("q");
var defer1 = q.defer();
var defer2 = q.defer();

function test(i) {
	console.log(++i);
	return i;
}

function testPromise(i) {
	i += 100;
	console.log(i);
	defer2.resolve(i);
	return defer2.promise;
}

defer1.promise.then(test)
	.then(testPromise)
	.then(test);

defer1.resolve(0);
该例子的执行结果:1 101 102

该例子中声明了两个promise对象,在执行到.then(testPromise)的时候因为返回了一个promise2对象,所以在执行下一个.then(test)方法的时候promise1会获取promise2的状态,执行最后一个.then(test)的时候,使用的值是promise2的解决值。

执行过程类似如下:

var q = require("q");
var defer1 = q.defer();
var defer2 = q.defer();

function test(i) {
	console.log(++i);
	return i;
}

function testPromise(i) {
	i += 100;
	console.log(i);
	defer2.resolve(i);
	return defer2.promise;
}

var promise1 = defer1.promise;
promise1 = promise1.then(test);
var promise2 = promise1.then(testPromise);
promise2 = promise2.then(test);

defer1.resolve(0);

下面是promises/A+协议中的一段话:

Promise 解决过程是一个抽象的操作,其需输入一个 promise 和一个值,我们表示为[[Resolve]](promise, x),如果xthen 方法且看上去像一个 Promise ,解决程序即尝试使promise 接受x 的状态;否则其用x 的值来执行 promise

在本例子中“x”对应的就是test方法和testPromise方法的返回值。

promise的概念感觉有点像java中的Future对象,但是比Future对象功能更强大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值