这个JavaScript函数需要返回Promise吗

Does this JavaScript function need to return a Promise?

本文关键字:返回 Promise JavaScript 函数 这个      更新时间:2023-09-26

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

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

现在,让我们假设我想将此代码封装在一个函数中,并让它在成功块中返回一些值,这样我就可以在应用程序的各个位置调用它。我创建的函数应该返回Promise吗?我想可能是这样,但我从未创建过返回Promise的JS函数,所以我不完全确定什么时候需要这样做。

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

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

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

好消息:这并不复杂,因为$.getJSON已经给了你一个合作的承诺。现在,您所需要做的就是使用then方法——您可以传递一个回调来处理结果,并为回调的返回值返回一个新的promise。你只需要用then替换你的success,并添加一些returns:

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

有了promise,就不再向$.getJSON函数传递回调了。

这样我就可以在我的应用程序中从不同的地方调用它

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

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