这个JavaScript函数是否需要返回Promise?

时间:2014-10-06 13:38:38

标签: javascript promise jquery-deferred

假设我有一些JS如下所示进行AJAX调用:

$.getJSON(myUrl, { targetState: state }, function (jsonData) {
}).success(function (jsonData) {
    ...
    ...
    ...
});

现在让我们假设我想将这段代码包装在一个函数中,让它在成功块中返回一些值,这样我就可以在我的app中的各个地方调用它。我创建的函数应该返回Promise吗?我想它可能会这样,但我从来没有创建过一个返回Promise的JS函数,因此我不能完全确定何时需要这样做。

1 个答案:

答案 0 :(得分:4)

  

我创建的函数是否应该返回Promise

是。如果你想使用promises,每个执行任何异步的函数都应该为它的结果返回一个promise。没有例外,真的。

  

将此代码包装在一个函数中,并在成功块中返回一些值

好消息:这并不复杂,因为$.getJSON已经给了你许诺。现在您需要做的就是使用then method - 您可以传递回调以对结果执行某些操作并获取回调的返回值的新承诺。您只需将success替换为then,然后添加一些return

function target(state) {
    var myUrl = …;
    return $.getJSON(myUrl, { targetState: state })
//  ^^^^^^
    .then(function (jsonData) {
//   ^^^^
        /* Do something with jsonData */
        return …;
//      ^^^^^^
    });
}

使用promises,您不再需要将回调传递给$.getJSON函数。

  

所以我可以在我的应用程序中的各个地方调用它

现在,您可以调用target函数,并在另一个回调中获取返回的promise的结果:

target({…}).then(function(result) {
    …; return …;
});