inw*_*ust 5 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())
Run Code Online (Sandbox Code Playgroud)
谢谢!
Done 总是返回承诺,从你提供的函数返回任何东西到 done 是没有意义的:
deferred.done() 方法接受一个或多个参数,所有参数都可以是单个函数或函数数组。当 Deferred 被解析时,doneCallbacks 被调用。回调按添加顺序执行。由于 deferred.done() 返回的是延迟对象,因此可以将延迟对象的其他方法链接到这个方法,包括额外的 .done() 方法来源:https : //api.jquery.com/deferred.done/
promise.done(...).done(...)或者promise.done(fn1, fn2)是等价的。
你可以使用.then如果你想返回一个带有“data”新值的新承诺,即:
promise.then(function(data1){
return data1.result;
}).done(function(data2){
//the value of data2 here will be data1.result
});
Run Code Online (Sandbox Code Playgroud)
then 的一个比较常见的用法是返回一个新的 promise,例如:
promise.then(function(data){
return $.ajax(...);
}).done(function(resultFromAjaxCall){});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20065 次 |
| 最近记录: |