关于Node.js异步转同步

  用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');
});

上述的函数将会按顺序依次执行 

posted @ 2017-08-06 17:36  可恶の小郑  阅读(968)  评论(0编辑  收藏  举报