【问题标题】:Adding async await without having to modify parent calling functions添加异步等待而无需修改父调用函数
【发布时间】:2019-01-08 18:08:15
【问题描述】:

在我的 Javascript 应用程序中,有时我发现我需要修改一段最初同步运行的代码并添加一些异步运行的代码。

之前:

function doSomething() {
   var x = 0;

   ...

   return true;
}

之后:

async function doSomething() {
   var x = 0;
   await doSomethingElse();

   ...

   return true;
}

很多时候这很好。但是,如果函数 doSomething 被另一个期望 doSomething 完成并返回结果的函数调用,就会出现问题。最初代码是同步运行的,所以这不是问题。但是现在我已经向 doSomething 添加了异步,它甚至会在 doSomethingElse 调用完成之前立即返回。然而,在 doSomethingElse 完成以及其后的任何代码之前,我不希望 doSomething 返回。我能想到的唯一解决方案是修改调用代码以将 doSomething 作为 Promise 处理。这样做的问题是我最终不得不为调用该函数的函数做同样的事情,依此类推。

有没有办法添加 doSomethingElse 以使 doSomething 仍将同步执行?

类似的帖子似乎表明这是不可能的(但那是 3 年前的事了。也许从那以后发生了一些变化以使其成为可能):

How to block for a javascript promise and return the resolved result?

【问题讨论】:

  • 这仍然不可能,而且可能永远不会。

标签: javascript


【解决方案1】:

你唯一的选择就是在某个时候“开枪即忘”:

 function doSomething() {
   var x = 0;
   doSomethingElse();
    // ...
   return true;
}

【讨论】:

  • doSomethingElse 返回一个 Promise,因此不能像您显示的那样调用。
  • @androidDev 哦,真的吗?
【解决方案2】:

你的 doSomething 方法也会返回一个承诺。
所以用它作为正常的承诺

doSomething().then(boolean=>{

}).catch(e=>{

})

async function other(){
    try{
        let boolean = await doSomething();
        // your other code
    }catch(e){
        // your error handler
    }
}

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2021-05-09
    • 2023-03-13
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多