javascript – jquery deferred – 等到两个电话完成

前端之家收集整理的这篇文章主要介绍了javascript – jquery deferred – 等到两个电话完成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在两次ajax调用完成后,我正在寻找一种回调方式:
$.when(
    call1(),call2()
).always(function() {
    // Here I want to be sure the two calls are done and to get their responses 
);

其中一个调用可能会失败.所以在我的代码中总是会调用,而不用等待另一个调用.

如何等待两个呼叫完成(成功或失败)?

解决方法

这是一个应该做的诀窍:
$.whenAllDone = function() {
    var deferreds = [];
    var result = $.Deferred();

    $.each(arguments,function(i,current) {
        var currentDeferred = $.Deferred();
        current.then(function() {
            currentDeferred.resolve(false,arguments);
        },function() {
            currentDeferred.resolve(true,arguments);
        });
        deferreds.push(currentDeferred);
    });

    $.when.apply($,deferreds).then(function() {
        var failures = [];
        var successes = [];

        $.each(arguments,args) {
            // If we resolved with `true` as the first parameter
            // we have a failure,a success otherwise
            var target = args[0] ? failures : successes;
            var data = args[1];
            // Push either all arguments or the only one
            target.push(data.length === 1 ? data[0] : args);
        });

        if(failures.length) {
            return result.reject.apply(result,failures);
        }

        return result.resolve.apply(result,successes);
    });

    return result;
}

查看this Fiddle看看它是如何工作的.

基本上,等待所有Deferreds完成,无论他们是否失败,并收集所有的结果.如果我们有失败,返回的Deferred将失败并列出所有故障,否则解决所有成功.

原文链接:https://www.f2er.com/jquery/152454.html

猜你在找的jQuery相关文章