此JavaScript函数是否需要返回承诺?

此JavaScript函数是否需要返回承诺?,javascript,promise,jquery-deferred,Javascript,Promise,Jquery Deferred,假设我有一些JS可以进行如下AJAX调用: $.getJSON(myUrl, { targetState: state }, function (jsonData) { }).success(function (jsonData) { ... ... ... }); 现在让我们假设我想把这段代码包装在一个函数中,并让它在success块中返回一些值,这样我就可以在我的应用程序的各个地方调用它。我创建的函数是否应该返回承诺?我想它可能会,但我从来没有创建过返回承诺的JS函

假设我有一些JS可以进行如下AJAX调用:

$.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票。