【问题标题】:waiting for async callback, then return [duplicate]等待异步回调,然后返回 [重复]
【发布时间】:2015-09-16 18:02:39
【问题描述】:

这是一个我想调用它的返回值的函数,在那个函数中我想使用一个异步调用来设置一个标志以便以后使用:

function getSomething() {
    var isOk;

    myAsyncFunction(function(data) {
        if (data === 'foo') {
            isOk = true;
        }
    });

    //...

    if (isOk) {
        return true;
    }
}

我想像这样使用 getSomething():

if (getSomething()) {...}

我知道它不会暂停此函数的执行以等待我的异步调用完成。我也知道 return true 语句不应该在异步函数的回调中。但是我怎样才能等待异步函数的回调呢?我应该将我的 getSomething() 调用转换为承诺还是有其他方法?如果我使用承诺,getSomething() 的调用会是什么样子?提前致谢!

【问题讨论】:

  • myAsyncFunction 应该返回一个承诺,你应该从 getSomething 返回那个承诺。
  • “但是我怎么能等待异步函数的回调呢?” 你不能,那是不可能的。唯一的选择是直接或在 promise 对象上使用回调。

标签: javascript jquery asynchronous


【解决方案1】:

你可以使用JavaScriptPromise

var promise = new Promise(function(resolve, reject) {


  if (/* everything turned out fine */) {
    resolve("worked!");
  }
  else {
    reject(Error("broke"));
  }
});

如何使用

promise.then(function(result) {
  console.log(result); // "worked!"
}, function(err) {
  console.log(err); // Error: "broke"
});

欲了解更多信息,您可以访问此链接Promise

【讨论】:

  • 但是您仍然不能在if 中使用返回值。您不能等待异步操作。
猜你喜欢
  • 2018-09-22
  • 2019-02-06
  • 2020-04-26
  • 2016-10-27
  • 2012-05-04
  • 1970-01-01
  • 2021-05-25
  • 2021-06-30
  • 1970-01-01
相关资源
最近更新 更多