用Node.js做开发我们有时候会很沉浸在它的异步回调机制中。发送一个请求,不管什么时候响应,我们写好一个对应的回调函数(callback),然后我们就可以进行下一步的操作。但是有时候我们又会陷入苦恼之中,比如说我必须在取得回调之后的数据之后才能进行接下来的操作,那么我们就要想办法转异步为同步了。
最常见的异步操作:
Async(parameters,function(){
//回调操作
})
但是如果在回调里面还有另外的回调,那我们就会陷入深深的回调泥潭里。步入正题,Node.js提供原生的Promise解决上述的问题(http://liubin.org/promises-book/):
function Async(){
return new Promise(function (resolve, reject) {
//异步操作,成功回调里面执行resolve,失败回调里面执行reject
})
}
使用时:
Async().then(function(){
}).catch(function(){
})
另外安利一个好用的npm包:Async模块,里面提供了很多异步转同步的操作,个人用的最多的是waterfall:
async.waterfall([
function(callback){
callback(null, ‘one‘, ‘two‘);
console.log(‘1‘);
},
function(arg1, arg2, callback){
callback(null, ‘three‘);
console.log(arg1);
console.log(arg2);
},
function(arg1, callback){
// arg1 now equals ‘three‘
callback(null, ‘done‘);
console.log(arg1);
}
], function (err, result) {
console.log(result);
// result now equals ‘done‘
// console.log(‘4‘);
});
上述的函数将会按顺序依次执行