当前位置: 首页 > 知识库问答 >
问题:

添加异步等待,而不必修改父调用函数

白侯林
2023-03-14

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

之前:

function doSomething() {
   var x = 0;

   ...

   return true;
}

之后:

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

   ...

   return true;
}

很多时候,这是可以的。但是,如果另一个函数正在调用函数do某物,该函数希望do某物完成并返回结果,就会出现问题。最初代码是同步运行的,所以这不是问题。但是现在我已经为do某物添加了async,它甚至会在do某物调用完成之前立即返回。然而,我不希望do某物返回,直到do某物调用完成,以及后续的任何代码。我能想到的唯一解决方案是修改调用代码来处理do某物作为promise。这样做的问题是,我最终不得不为调用该函数的函数做同样的事情,等等。

有没有办法添加doSomethingElse,使doSomething仍然同步执行?

一篇类似的帖子似乎暗示这是不可能的(但那是3年前的事了。也许从那时起就有了一些东西使之成为可能):

如何阻止一个javascriptpromise并返回解决的结果?

共有2个答案

东郭翰音
2023-03-14


因此,使用它作为普通的promise

doSomething().then(boolean=>{

}).catch(e=>{

})

async function other(){
    try{
        let boolean = await doSomething();
        // your other code
    }catch(e){
        // your error handler
    }
}
司马高昂
2023-03-14

你唯一的选择就是在以下情况下“开火然后忘记”:

 function doSomething() {
   var x = 0;
   doSomethingElse();
    // ...
   return true;
}
 类似资料:
  • 我正试图将图像上传到firebase存储,但调用该函数时,未执行wait以获取url。我错过了什么? 看看这个其他主题,我发现问题可能是“然后”,但我如何设置代码以等待url? 异步/等待/然后飞镖/颤振 谢谢

  • 问题内容: 我知道这个问题以前曾被问过,但是所有解决方案都不适合我。 我有一个将参数发送到API的函数,并以列表的形式返回数据。我有一个UITableView设置为使用该列表,但是它在列表分配给变量之前运行。 码: 如果不立即将其作为重复投票,我将不胜感激,这是我尝试的方法。 派遣组 信号量计时 运行变量 其中包括= self和= self 。 编辑:要求提取项目, 问题答案: 您不能-也不应该-

  • 我通读了Dart/flatter中的Async/Await/then,试图理解为什么aysnc函数中的Await不会等到完成后再继续。在我的UI中,有一个按钮调用一个异步方法来返回一个位置,该位置总是返回null,并且不等待函数完成。 该函数将调用推送到一个新的UI页面,该页面选择一个位置,并应返回一个结果。如何使该函数等待结果?我不是在使用异步吗?

  • 我使用Java中的创建一个线程池,每个线程在其中执行一些异步任务/调用另一个服务。我不想等待回复,但无论何时回复都会返回。 这样做将等待第一个请求完成,然后返回结果。问题是,第二个请求必须等待第一个请求的响应返回,并且只有在这之后才会被处理。如果我使用CompletableFuture的方法,也会发生同样的情况,因为我还必须使用来获取响应。 我希望所有的请求都经过检查,并在收到时返回回复。这是可以

  • 问题内容: 我的代码在javascript中看起来像这样: 在完成所有这些异步调用之后,我想计算所有数组的最小值。 我要如何等待所有人? 我现在唯一的想法是拥有一个名为done的布尔数组,并在第i个回调函数中将done [i]设置为true,然后说while(不是全部都完成了){} 编辑:我想一个可能但很丑陋的解决方案是在每个回调中编辑完了的数组,然后如果每个回调中都设置了所有其他完成,则调用一个

  • 我正在尝试将数据库调用移出控制器,以清理并使其可测试。当它们在控制器中时,一切都会顺利进行。我将它们移出控制器,并添加了一个异步,以确保我们等待。否则,我将调用的中的函数。现在,一旦我使用async/await,控制器中的函数就会认为没有用户,因为它没有等待。 有几个关于异步等待的SO问题,但我没有找到一个解决我的问题。我确实验证了返回了我的用户,并添加了控制台日志来显示路径。 节点猫鼬异步等待似