首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript:使用一个回调执行一组异步方法

javascript:使用一个回调执行一组异步方法
EN

Stack Overflow用户
提问于 2010-05-26 09:52:30
回答 4查看 4.6K关注 0票数 14

我需要执行一系列异步方法(客户机SQLite数据库),并且只调用一个最终回调。

当然,丑陋的方式是:

代码语言:javascript
复制
execAll : function(callBack) {
        asynch1(function() {
            asynch2(function() {
                ...
                asynchN(function() {
                    callBack();
                })
            })
        });
    }

但我知道有更好的方法。直觉上,我会检测到,当所有的回调都被一个计数器调用时,就会调用最终的回调。

我觉得这是个普通的design-pattern,所以如果有人能给我指明正确的方向.

提前谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-26 10:02:30

这很容易

代码语言:javascript
复制
var callback = (function(){
    var finishedCalls = 0;
    return function(){
        if (++finishedCalls == 4){
             //execute your action here
        }
    };
})();

只需将此回调传递给所有方法,一旦它被调用4次,它将执行。

如果您想为此使用工厂,则可以执行以下操作

代码语言:javascript
复制
function createCallback(limit, fn){
    var finishedCalls = 0;
    return function(){
        if (++finishedCalls == limit){
             fn();
        }
    };
}


var callback = createCallback(4, function(){
    alert("woot!");
});


async1(callback);
async2(callback);
async3(callback);
async4(callback);
票数 21
EN

Stack Overflow用户

发布于 2010-07-09 10:23:47

我编写了一些您可能认为有用的异步实用程序,允许您将示例编写为:

代码语言:javascript
复制
function(callback) {
    async.series([
        asynch1(),
        asynch2(),
        ...
        asynchN()
    ], callback);
}

或者,如果您想并行运行它们,如:

代码语言:javascript
复制
function(callback) {
    async.parallel([
        asynch1(),
        asynch2(),
        ...
        asynchN()
    ], callback);
}

还有很多其他有用的函数,如异步map/reduce:

http://caolanmcmahon.com/async.html

希望这能帮上忙!

票数 8
EN

Stack Overflow用户

发布于 2013-05-15 02:34:53

您应该考虑在异步方法中使用延迟模式。您可以从以下StackOverflow问题和答案中获得更多信息:

What are the differences between Deferred, Promise and Future in JavaScript?

来自jnewman的显著答案实际上是好的!

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2911822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档