相关疑难解决方法(0)

将Deferred数组传递给$ .when()

这是一个人为的例子:http://jsfiddle.net/adamjford/YNGcm/20/

HTML:

<a href="#">Click me!</a>
<div></div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function getSomeDeferredStuff() {
    var deferreds = [];

    var i = 1;
    for (i = 1; i <= 10; i++) {
        var count = i;

        deferreds.push(
        $.post('/echo/html/', {
            html: "<p>Task #" + count + " complete.",
            delay: count
        }).success(function(data) {
            $("div").append(data);
        }));
    }

    return deferreds;
}

$(function() {
    $("a").click(function() {
        var deferreds = getSomeDeferredStuff();

        $.when(deferreds).done(function() {
            $("div").append("<p>All done!</p>");
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我想要"全部完成!" 在所有延迟任务完成后$.when()出现,但似乎不知道如何处理Deferred对象数组."全部完成!" 首先发生的是因为数组不是Deferred对象,所以jQuery继续并假设它刚刚完成.

我知道可以将对象传递给函数,$.when(deferred1, deferred2, ..., deferredX) …

javascript jquery argument-passing jquery-deferred .when

439
推荐指数
6
解决办法
11万
查看次数

jQuery何时/ then/fail并发ajax请求:哪个请求失败?

想象一下我们想要在'foo'和'bar'的并发请求成功完成后执行某些操作的情况,或者如果其中一个或两个都失败则报告错误:

$.when($.getJSON('foo'), $.getJSON('bar'))
  .then(function(foo, bar) {
    console.log( 'I fire if BOTH requests are successful!' );
  })
  .fail(function() {
    console.log( 'I fire if one or more requests failed.' );
  });
Run Code Online (Sandbox Code Playgroud)

我怎样才能确定1)'foo'请求失败,或2)'bar'请求失败,或3)如果两者都失败了?

javascript jquery jquery-deferred

9
推荐指数
1
解决办法
1万
查看次数

$ .Deferred:如何检测每个承诺何时执行

我有许多需要完成的异步任务,所以我使用的是promises.

我需要检测每个承诺何时被执行(解决和拒绝).在此之前我不能继续执行.

我使用的是这样的东西:

$.when(promise1, promise2, ...).always();
Run Code Online (Sandbox Code Playgroud)

但是这个代码是错误的,因为该when方法具有惰性求值,并且只要其中一个promise失败就会返回.因此,always只要其中一个承诺失败,回调也会运行.

我想在编码一个解决办法,但这种使用情况是如此普遍,也许有人已经做它已经,或者也许甚至还有这样做只使用jQuery的的一种方式(如果不是,这将是很好添加Promise.whenNonLazyPromise.when(promise1, promise2, ..., false)在未来.

这可能吗?

javascript jquery asynchronous promise jquery-deferred

5
推荐指数
1
解决办法
2049
查看次数