【问题标题】:Append return values to jQuery Deferred/ Callbacks将返回值附加到 jQuery Deferred/Callbacks
【发布时间】:2014-03-18 15:20:53
【问题描述】:

有没有办法添加到 jQuery Callbacks 对象的内存中?例如,如果有一个设置了内存标志的 jQuery Callbacks 对象,有没有办法在列表中的一个回调函数中向内存添加一个值,以便下一个运行的函数将获得附加值?

我想基本上在 Deferred then 链的末尾添加一个额外的参数给 failFilter 函数,而不返回一个新的被拒绝的 Deferred 对象。

我目前在做什么:

deferred.then(null, function(error, errorType){
    errorType = typeof(errorType) === "undefined" ? "INDEXEDDB_ERROR" : errorType;
    return new jQuery.Deferred().reject(error, errorType);
});

我想做的事:

deferred.then(null, function(error, errorType){
    errorType = typeof(errorType) === "undefined" ? "INDEXEDDB_ERROR" : errorType;
    return [error, errorType];
});

并且基本上在延迟 then 链的末尾有错误处理程序来接收 errorerrorType 作为参数

【问题讨论】:

  • 从失败回调中返回任何东西绝对没有意义。您是否打算改用.then.fail 不是过滤器。
  • 不幸的是,即使使用 .then,让它作为两个参数而不是数组作为第一个参数返回的唯一方法是创建一个新的 deferred。
  • 示例是 then 链中函数的一部分。所以我会有像fcn().then(fcn2).then(fcn3)...then(null, errorHandler). 这样的东西 在每个fcns中我返回一个延迟的承诺,它定义了.fail,而不是在then的第二个参数中定义一个failFilter@
  • .fail 中的函数是这样定义的,以便链中发生的第一个(或原始)错误在最后传递给errorHandler,而不会被then 链中的其他承诺
  • @KevinB 对此感到抱歉,你是对的,在进一步研究之后,我显然是说.then。我想我会继续返回一个新的延迟对象。我希望有一种更优雅的方式。

标签: jquery memory callback deferred


【解决方案1】:

由于没有任何方法可以在 jQuery Deferred then() 错误回调中传递多个参数而不传递新的延迟对象,因此我决定采用 @Beetroot-Beetroots 建议并将错误包装在带有 @ 的对象中987654322@ 表示错误类型,pass 属性表示不处理错误并将其传递给下一个处理程序

deferred.then(/*success callback*/, function(error){
    error = error || null;
    if (typeof(error.pass) === "undefined"){
        error = {
            error: arugments,
            type: "indexedDb",
            pass: true
        };
    }
    return error;
});

【讨论】:

  • 感谢您发布您所做的事情,因为它对未来的用户非常有用。我不得不想知道,为什么你只是不抛出错误(承诺是安全的,并且会传播拒绝)并将错误对象子类化?您正在做的事情在堆栈跟踪等上丢失了。您的错误应该始终是Errors。
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 2013-07-14
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2016-01-10
  • 2011-01-10
相关资源
最近更新 更多