node使用promise替代回调函数

2020-06-17 06:56:08易采站长站整理

* 当 inputPromise 状态由未完成变成 rejected 时,这个 rejected 会传向 outputPromise
*/
var outputPromise = getInputPromise().then(function (fulfilled) {
return 'fulfilled'
});
outputPromise.then(function (fulfilled) {
console.log('fulfilled: ' + fulfilled);
}, function (rejected) {
console.log('rejected: ' + rejected);
});

/**
* 将 inputPromise 的状态由未完成变成 rejected
*/
defer.reject('inputpromise rejected'); // 控制台打印 rejected: inputpromise rejected

/**
* 将 inputPromise的状态由未完成变成fulfilled
*/
//defer.resolve();

没有提供 function(fulfilled)


var outputPromise = getInputPromise().then(null, function (rejected) { })

如果 inputPromise 的状态由未完成变成 fulfilled, 此时对 fulfil 的处理会由 outputPromise 来完成


var Q = require('q');
var fs = require('fs');
var defer = Q.defer();

/**
* 通过defer获得promise
* @private
*/
function getInputPromise() {
return defer.promise;
}

/**
* 当 inputPromise 状态由未完成变成 fulfil时,传递给 outputPromise
* 当 inputPromise 状态由未完成变成 rejected时,调用 function(rejected)
* function(fulfilled) 将新的 promise 赋给 outputPromise
* 未完成改变为 reject
* @private
*/
var outputPromise = getInputPromise().then(null, function (rejected) {
return 'rejected';
});

outputPromise.then(function (fulfilled) {
console.log('fulfilled: ' + fulfilled);
}, function (rejected) {
console.log('rejected: ' + rejected);
});

/**
* 将 inputPromise 的状态由未完成变成 rejected
*/
// defer.reject('inputpromise rejected');

/**
* 将 inputPromise 的状态由未完成变成fulfilled
*/
defer.resolve('inputpromise fulfilled'); // 控制台打印fulfilled: inputpromise fulfilled

可以使用 fail(function(error)) 来专门针对错误处理,而不是使用 then(null,function(error))


var outputPromise = getInputPromise().fail(function (error) { })

看这个例子:


var Q = require('q');
var fs = require('fs');
var defer = Q.defer();
/**
* 通过defer获得promise
* @private
*/
function getInputPromise() {
return defer.promise;
}

/**
* 当 inputPromise 状态由未完成变成 fulfil 时,调用 then(function(fulfilled))
* 当 inputPromise 状态由未完成变成 rejected 时,调用 fail(function(error))
* function(fulfilled) 将新的 promise 赋给 outputPromise
* 未完成改变为reject
* @private
*/
var outputPromise = getInputPromise().then(function (fulfilled) {