Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用承诺使依赖函数异步_Javascript_Html - Fatal编程技术网

Javascript 使用承诺使依赖函数异步

Javascript 使用承诺使依赖函数异步,javascript,html,Javascript,Html,我有两个函数想使异步,但一个函数依赖于另一个函数。是否两个函数本质上都是异步的,但函数b在函数a之后执行 当然。有很多方法可以做到这一点 如果您正在执行简单的回调样式: funcA(paramsA,function(resultsA) { // do some post-processing funcB(paramsB, function(resultsB) { // do some more post-processing }); }); 如果您实际使用的是promis

我有两个函数想使
异步
,但一个函数依赖于另一个函数。是否两个函数本质上都是
异步的
,但
函数b
函数a
之后执行

当然。有很多方法可以做到这一点

如果您正在执行简单的回调样式:

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
  });
});
如果您可以连锁承诺(取决于您的承诺实施):

但以上取决于A和B之间正确传递的参数

我最喜欢的是使用草兰的伟大异步库,因为这样您就可以轻松地执行以下操作:

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) {
});

因此,如果我的两个函数是正在运行的()和使用承诺保存的(),它将类似于funcA()。然后(函数(resultsA){is_running();funcB()。然后(函数(resultsB){is_saved};});这是正确的吗?是的,尽管您可能能够链接它们,这取决于从一个参数到另一个参数(以及您的Promissions库是否支持链接)。请参见上面的第二个示例。
async.waterfall([
  function(cb){funcA(paramsA).then(cb);},
  function(resultsA,cb){funcB(paramsB).then(cb);}
],function(err,resultsB) {
});