Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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_Jquery_Ajax - Fatal编程技术网

Javascript 使用延迟和何时

Javascript 使用延迟和何时,javascript,jquery,ajax,Javascript,Jquery,Ajax,我在循环中进行ajax调用,ajax调用在self.fileUpload类中: $.when.apply($, $.map($('.file-new'), function(fileNewTemplate, i) { var formData = new FormData(); return self.fileUpload.upload(formData).then(function(data){ return $.Deferred()

我在循环中进行ajax调用,ajax调用在self.fileUpload类中:

$.when.apply($, $.map($('.file-new'), function(fileNewTemplate, i) {

        var formData = new FormData();

        return self.fileUpload.upload(formData).then(function(data){
            return $.Deferred().resolveWith(this);

        }).fail(function(){
            console.log('ajax call failed');

        });

    })).done(function(){
        console.log('when done');

    })
    .always(function(){
        console.log('when always');
    })
    .fail(function(){
        console.log('when fail');
    })
问题是,当一个ajax调用失败时,when调用失败。我需要一个解决方案,在所有承诺都兑现后,不管部分或全部承诺是否失败,该解决方案都会称之为“完成”

我在这里查看了答案:

从上面的代码可以看出,我已经实现了公认的解决方案

问题是,done仍然从未被调用,并且总是在一个ajax调用失败时被调用

我哪里做错了

我哪里做错了

不是你,而是
$.when()
如何工作

但您可以轻松实现一个函数,该函数将在所有承诺之后
resolve
reject

var waitAllRegardlessResult = function(promises) {
    var cnt = promises.length,
        d = $.Deferred(),
        countHandler = function() {
            if (--cnt == 0) {
                d.resolve();
            }
        };

    promises.map(function(promise) {
        promise.always(countHandler);
    });

    return d.promise();
};
演示:


因此,此函数将返回一个promise对象,该对象在所有promise作为数组传递后
已解析
已拒绝

这与我的代码在哪里匹配?它是如何循环通过我的所有ajax请求的?@panthro:您使用给定的函数而不是
$.when()
。在JSFIDLE页面上,您可以看到用法示例对不起,您的小提琴不清楚。承诺在哪里传递到上述方法?@panthro:20行:
waitAllRegardlessResult([a,b])
---第1行和第2行都定义了
a
b
承诺,那么我应该向方法传递什么承诺?不,您没有从那里的答案实现我的解决方案。返回已解析延迟的回调是
的第二个参数。然后()
,第一个参数是
null