将返回值追加到jQuery延迟/回调
是否有任何方法可以添加到jQuery回调对象的内存中?例如,如果有一个设置了内存标志的jQuery回调对象,是否有方法向列表中某个回调函数的内存中添加一个值,以便运行的下一个函数将获得附加值 我想基本上添加一个额外的参数,在一个Deferred-then链的末尾提供给failFilter函数,而不返回一个新的拒绝的Deferred对象 我目前正在做的事情:将返回值追加到jQuery延迟/回调,jquery,memory,callback,deferred,Jquery,Memory,Callback,Deferred,是否有任何方法可以添加到jQuery回调对象的内存中?例如,如果有一个设置了内存标志的jQuery回调对象,是否有方法向列表中某个回调函数的内存中添加一个值,以便运行的下一个函数将获得附加值 我想基本上添加一个额外的参数,在一个Deferred-then链的末尾提供给failFilter函数,而不返回一个新的拒绝的Deferred对象 我目前正在做的事情: deferred.then(null, function(error, errorType){ errorType = typeof
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];
});
基本上,在deferred-then链的末尾有一个错误处理程序来接收
error
和errorType
作为参数,因为在jQuery-deferredthen()
错误回调中,如果不传入新的延迟对象,就无法传递多个参数,我决定接受@beetrootbeetroots建议,将错误包装在一个对象中,并使用类型
指示错误类型,使用传递
属性不处理错误并将其传递给下一个处理程序
i、 e
从失败回调返回任何内容都毫无意义。您是否打算改用
。然后.fail
不是一个过滤器。不幸的是,即使使用.then,让它作为两个参数而不是数组作为第一个参数返回的唯一方法是创建一个新的延迟。示例是then链中函数的一部分。因此,我会有类似于fcn().then(fcn2).then(fcn3)…then(null,errorHandler)的东西。
在每个fcn中,我返回一个延迟的承诺,其中包含它的.fail定义,而不是在的第二个参数中定义一个failFilter,然后中的函数以这种方式定义第一个(或原始的)链中发生的错误会在最后传递给errorHandler
,而不会被链中其他承诺的failCallbacks更改chain@KevinB很抱歉,你是对的,我的意思显然是。在做了进一步的研究之后。我想我会继续返回一个新的延迟对象。我希望有一种更优雅的方式。感谢你发布了你所做的,因为它对未来的用户非常有用。我不得不想知道,为什么您不抛出错误(承诺是抛出安全的,并且会传播拒绝)和子类化错误对象?堆栈跟踪等中缺少您正在执行的操作。您的错误应该始终是Error
s。
deferred.then(/*success callback*/, function(error){
error = error || null;
if (typeof(error.pass) === "undefined"){
error = {
error: arugments,
type: "indexedDb",
pass: true
};
}
return error;
});