我必须覆盖jQuery的getJSON函数,并且想知道是否有办法在覆盖函数中获得promise函数(done / fail)。我认为函数存储在某个地方。这是代码的开头:
(function ($) {
$.getJSON = function (url, data, callback) {
this.done = function(){};
this.fail = function(){};
var newDoneFtn = function(response) {
var newData = JSON.parse(response.data);
//call done function here with newData variable
}
var newFailFtn = function() {
//call fail function here
}
newFunction(url, data, newDoneFtn, newFailFtn);
};
})(jQuery);
$.getJSON(someURL, {
id: 1
}).done(function(data) {
console.log(data);
}).fail(function() {
console.log('failed');
});
我遇到的问题是尝试将getJSON调用中的已完成和失败的函数与newFunction一起使用。请注意,我无法更改newFunction。
答案 0 :(得分:1)
您应该使用$.Deferred()
创建一个新的Deferred对象。
然后,您可以调用/传递其resolve()
和reject()
函数来解决或失败其承诺。
答案 1 :(得分:1)
SLaks已经回答了;您可以返回$.Deferred:
function getJson(){
var deferred = $.Deferred();
try{
someCallbackApi(
param
,function(response){
response.error
? deferred.reject(response.error)
: deferred.resolve(JSON.parse(response.data))
}
);
}catch(e){
deferred.reject(e);
}
return deferred.promise();
}