jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jQuery.Deferred()然后,如何解决多个参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我的API希望当一个特定的延迟被@L_874_1@它得到2个参数.
fn().done(function(arg1,arg2) {
  console.log(arg1,arg2);
}).fail(function(err) {
  console.error(err);
});

现在关于上面的fn功能,需要先等待一些其他的延迟返回才能@L_874_1@.

function other() {
  // stubbed out to always resolve
  return $.Deferred().resolve().promise();
}

function fn() {
  return other().then(function() {
    return [1,2];
  });
}

但是这并不奏效,因为arg1将会出现[1,2],而arg2将会是未定义的.我不知道如何从Deferred.then()第一个成功过滤器函数参数返回一些东西,以便最终的管道延迟解析与多个参数.

当然我可以这样做:

function fn() {
  var done = $.Deferred();
  other().done(function(){
    done.resolve(1,2);
  }).fail(function(){
    done.reject.apply(done,arguments);
  });
  return done.promise();
}

但是这并不像使用.then()那么优雅,我现在每次都需要担心负面的故障情形API,即使我知道我只是通过拒绝的状态来管理.

是的,我也可以改变fn()api来@L_874_1@一个数组,但我真的希望有一个优雅的解决方案.

解决方法

您必须调用resolve()或reject()才能传递多个参数.

.then()不包含用于“传播”返回的集合的任何机制.它只会将收藏品保持原样作为第一个参数.

但是,它将与退回的递延或承诺进行交互.从paragraph starting with “As of jQuery 1.8

所以,你可以使用其他()的例子作为fn()的基础来保持它与另一个Deferred()相当简洁:

function fn() {
    return other().then(function () {
        return $.Deferred().resolve(1,2).promise();
    });
}

fn().then(function (a,b) {
    console.log(arguments.length,a,b); // 2 1 2
});

http://jsfiddle.net/cqac2/

大佬总结

以上是大佬教程为你收集整理的jQuery.Deferred()然后,如何解决多个参数全部内容,希望文章能够帮你解决jQuery.Deferred()然后,如何解决多个参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。