使用promises使依赖函数异步

时间:2014-12-08 06:23:08

标签: javascript html5

我有两个函数,我想要async,但一个函数依赖于另一个函数。这两个函数本质上是asyncfunction b之后是function a执行吗?

1 个答案:

答案 0 :(得分:0)

不确定。有很多方法可以做到这一点。

如果您正在使用简单的回调样式:

funcA(paramsA,function(resultsA) {
  // do some post-processing
  funcB(paramsB, function(resultsB) {
     // do some more post-processing
  });
});

如果您实际使用的是promises(取决于您的风格和库),那么它可以更容易一些:

funcA(paramsA).then(function(resultsA) {
  // do some post-processing
  funcB(paramsB).then(function(resultsB) {
    // do some more post-processing
  });
});

如果你可以链接承诺(取决于你的承诺实施):

funcA(paramsA).then(funcB).then(function(resultsB) { ... });

但上述内容取决于A和B之间正确传递的参数。

我最喜欢的是使用caolan的伟大异步库https://github.com/caolan/async,因为这样你可以很容易地做到:

async.series([
  function(cb){funcA(paramsA).then(cb);},
  function(cb){funcB(paramsB).then(cb);}
],function(err,results) {
});

或者如果您需要其中一个的结果:

async.waterfall([
  function(cb){funcA(paramsA).then(cb);},
  function(resultsA,cb){funcB(paramsB).then(cb);}
],function(err,resultsB) {
});