覆盖getJSON并获取jQuery promise(完成/失败)

时间:2017-12-11 17:06:00

标签: javascript jquery promise

我必须覆盖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。

2 个答案:

答案 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();
}