如何强制jquery $ .when(...)失败

时间:2014-04-27 07:33:42

标签: javascript jquery ajax deferred

$.when(a1, ...).fail(function() { alert('fail'); });

a1的值是否会强制延迟对象失败,而不会在对象中执行任何格式错误的ajax调用?

2 个答案:

答案 0 :(得分:1)

您可以传递rejected Deferred object

$.when($.Deferred().reject()).fail(function() {
    alert("fail");
});

您可以在this fiddle中进行测试。

答案 1 :(得分:1)

详细说明@FrédéricHamidi,如果你有一个“异步”功能,而这个功能还没有被“宣传”,那么它通常会有成功和失败的回调。

然后你做了类似的事情:

// @returns {promise} a promise
function callAsync(args){
  var deferred = $.Deferred();

  ApiNotReturningPromise.ajax(args, function success(data) {
    deferred.resolve(data);
    // if you wish to always fail: o.O
    // deferred.reject(data);
  }, function fail(error) {
    deferred.reject(error);
  });

  return deferred.promise();
}

同样,如果你愿意,你可以在这两种情况下失败,虽然这对我来说似乎没有意义,

但是,如果它已经是一个Promise,(并且AFAIK承诺就像jQuery一样),那么你可以重用这个承诺。