此JavaScript函数是否需要返回承诺?
假设我有一些JS可以进行如下AJAX调用:此JavaScript函数是否需要返回承诺?,javascript,promise,jquery-deferred,Javascript,Promise,Jquery Deferred,假设我有一些JS可以进行如下AJAX调用: $.getJSON(myUrl, { targetState: state }, function (jsonData) { }).success(function (jsonData) { ... ... ... }); 现在让我们假设我想把这段代码包装在一个函数中,并让它在success块中返回一些值,这样我就可以在我的应用程序的各个地方调用它。我创建的函数是否应该返回承诺?我想它可能会,但我从来没有创建过返回承诺的JS函
$.getJSON(myUrl, { targetState: state }, function (jsonData) {
}).success(function (jsonData) {
...
...
...
});
现在让我们假设我想把这段代码包装在一个函数中,并让它在success块中返回一些值,这样我就可以在我的应用程序的各个地方调用它。我创建的函数是否应该返回承诺?我想它可能会,但我从来没有创建过返回承诺的JS函数,所以我不能完全确定何时需要这样做
我创建的函数是否应该返回承诺
对。如果您想使用承诺,那么每个执行异步操作的函数都应该为其结果返回一个承诺。没有例外,真的
将此代码包装到函数中,并使其在成功块中返回一些值
好消息:这并不复杂,因为$.getJSON
已经给了您一个使用的承诺。现在,您需要做的就是使用-您可以传递回调来处理结果,并获得回调返回值的新承诺。您只需将您的成功
替换为然后
,并添加一些返回
s:
function target(state) {
var myUrl = …;
return $.getJSON(myUrl, { targetState: state })
// ^^^^^^
.then(function (jsonData) {
// ^^^^
/* Do something with jsonData */
return …;
// ^^^^^^
});
}
有了承诺,您就不再向$.getJSON
函数传递回调了
所以我可以在我的应用程序中的不同位置调用它
现在,您可以调用该target
函数,并在另一个回调中获得返回的承诺的结果:
target({…}).then(function(result) {
…; return …;
});
$.getJSON
返回实现Promise接口的jqXHR
对象。因此,您可以只返回$.getJSON
调用的结果。您可能还对使用承诺感兴趣。下面给出一个示例,说明如何通过链接然后将链接到来从外部使用目标函数。@BenjaminGruenbaum:[X]DoneWell,我不能再投票了:P我认为告诉人们用法是如何工作的真的很有帮助。太好了!谢谢你这么做。我希望我能投10票。