Architecture 确定jQuery延迟实例是否注册了失败处理程序

Architecture 确定jQuery延迟实例是否注册了失败处理程序,architecture,jquery-deferred,Architecture,Jquery Deferred,我有一个失败处理程序,它总是附加到延迟的ajax请求上。这是在全球范围内发生的,需要保持下去。在这个失败处理程序中,我需要知道是否注册了其他失败处理程序。通过一个简化的示例可能可以最好地说明这一点: var GlobalDataClient = { makeRequest: function (options) { return $.ajax(options) .done(this.onSuccess) .f

我有一个失败处理程序,它总是附加到延迟的ajax请求上。这是在全球范围内发生的,需要保持下去。在这个失败处理程序中,我需要知道是否注册了其他失败处理程序。通过一个简化的示例可能可以最好地说明这一点:

var GlobalDataClient = {
    makeRequest: function (options) {
        return $.ajax(options)
                .done(this.onSuccess)
                .fail(this.onFail);
    },
    onSuccess: function { /* data formatting, logging, etc */ },
    onFail: function { 
        /* logging, etc */
        if (/* there is no other fail handler */) {
            // notify user there was an error
        }
    },
};
然后,在我的应用程序中的各个模块中,我希望有本地故障处理程序隐式抑制全局用户通知:

// Let the global fail handler notify the user of any errors
GlobalDataClient.makeRequest({ ... });

// Suppress the global notification simply by defining a fail handler
GlobalDataClient.makeRequest({ ... }).fail( /* show a custom error message */ );

在全局处理程序中,如何判断是否注册了其他失败处理程序?我不希望在传递到数据请求中的选项上附加任何新数据。

jQuery延迟没有用于查询已附加哪些处理程序的公共API,此类信息不属于promise规范的一部分。您可能需要跟踪是否在承诺之外的其他地方安装了故障处理程序。请参阅