两个异步函数完成后如何运行函数

时间:2015-11-04 18:04:11

标签: javascript settimeout

假设我有一组调用setTimeout的函数。

[
  function(cb){
    setTimeout(function(){
      cb('one');
    }, 200);
  },
  function(cb){
    setTimeout(function(){
      cb('two');
    }, 100);
  }
]

有没有办法访问时间参数(200,100)并将其总和保存到变量?

我想只在完成这两个功能时执行一个功能

2 个答案:

答案 0 :(得分:2)

更好的方法是使用promises和Promise.all

var task1 = new Promise(function(resolve,reject) {
    setTimeout(function() {
        //do something
        resolve();
    }, 100);
});

var task2 = new Promise(function(resolve,reject) {
    setTimeout(function() {
        //do something
        resolve();
    }, 200);
});

Promise.all([task1, task2]).then(function() {
    //will be executed when both complete
});

答案 1 :(得分:0)

您可以通过计数闭包来模仿它。



function out(s) {
    var node = document.createElement('div');
    node.innerHTML = s + '<br>';
    document.getElementById('out').appendChild(node);
}

var f = [
        function (cb) { setTimeout(function () { cb('one'); }, 100); },
        function (cb) { setTimeout(function () { cb('two'); }, 200); }
    ],
    useCounter = function () {
        var count = 2;
        return function (s) {
            count--;
            out(s + ' ' + count);
            !count && out('done');
        }
    }();

f[0](useCounter);
f[1](useCounter);
&#13;
<div id="out"></div>
&#13;
&#13;
&#13;