使用jQuery返回AJAX承诺的结果

时间:2014-03-28 10:43:42

标签: javascript jquery return-value promise

有人可以解释为什么在下面的例子中,foo()返回整个promise而不仅仅是数据?如何让foo()只返回数据?

var foo = function() {
  var promise = $.ajax({
    type: 'POST',
    url: 'http://example.com'
  })

  return promise.done(function(data) {
    return data
  })
}

console.log(foo())

谢谢!

1 个答案:

答案 0 :(得分:3)

完成后总是返回承诺,从你提供的函数返回任何内容是没有意义的:

  

deferred.done()方法接受一个或多个参数,所有这些参数都是   可以是单个函数,也可以是函数数组。当。。。的时候   延迟解决后,调用doneCallbacks。回调是   按照添加的顺序执行。因为deferred.done()返回   延迟对象,延迟对象的其他方法都可以   链接到这一个,包括额外的.done()方法   资料来源:https://api.jquery.com/deferred.done/

promise.done(...).done(...)promise.done(fn1, fn2)是等效的。

如果您想使用“数据”的新值返回新的承诺,则可以使用.then,即:

promise.then(function(data1){
  return data1.result;
}).done(function(data2){
  //the value of data2 here will be data1.result 
});

当时的一个常见用途是返回一个新的承诺,例如:

promise.then(function(data){
  return $.ajax(...);
}).done(function(resultFromAjaxCall){});