我什么时候应该使用$ .getJSON.done()而不是$ .getJSON()?

时间:2017-07-05 16:08:03

标签: javascript jquery

我想知道这两个代码之间是否存在任何概念上的差异:

代码1:

$(function(){ 
  var url = "url";
  $.getJSON(url, function(data){
  console.log(data);
  })
});

代码2:

$(function(){ 
  var url = "url";
  $.getJSON(url).done(function(data){
  console.log(data);
  })
});

在哪种情况下,$ .getJson()。done()方法最相关?

1 个答案:

答案 0 :(得分:1)

第一个使用回调函数作为第二个参数。这允许您在功能完成后执行代码。请注意,您处于单独的功能中。

The Second也使用回调函数作为承诺,但它的工作方式不同。



// version one
setTimeout(function() {
  doStuff1();
  doStuff2();
}, 1000)


// version one - callback
function doStuff1() {
  doSomething1("value", function(responce) {
    console.log(responce);
  });
};

function doSomething1(v, cb) {
  if (typeof v === "string") {
    cb(true);
  } else {
    cb(false);
  }
  return false;
}

// note the function will always return false but the callback gets the value you want



// version 2, class with promise callback
// look at the class function and see how it works slightly differently
function doStuff2() {
  var $ = new doSomething2();
  $.Something("value").done(function(resp) {
    console.log(resp)
  });
};

class doSomething2 {
  constructor() {
    this.v = false;
  }

  Something(val) {
    if (typeof val === "string") {
      this.v = true;
    } else {
      this.v = false;
    }
    return this;
  }
  done(cb) {
    return cb(this.v);
  }
}