Javascript 添加异步等待而不必修改父调用函数
在我的Javascript应用程序中,我有时发现我需要修改一段最初同步运行的代码,并添加一些异步运行的代码 之前:Javascript 添加异步等待而不必修改父调用函数,javascript,Javascript,在我的Javascript应用程序中,我有时发现我需要修改一段最初同步运行的代码,并添加一些异步运行的代码 之前: function doSomething() { var x = 0; ... return true; } 之后: async function doSomething() { var x = 0; await doSomethingElse(); ... return true; } 很多时候这很好。但是,如果另一个函数正在
function doSomething() {
var x = 0;
...
return true;
}
之后:
async function doSomething() {
var x = 0;
await doSomethingElse();
...
return true;
}
很多时候这很好。但是,如果另一个函数正在调用doSomething函数,而该函数期望doSomething完成并返回结果,则会出现问题。最初代码是同步运行的,所以这不是问题。但是现在我已经向doSomething添加了async,它甚至会在doSomethingElse调用完成之前立即返回。然而,在doSomethingElse完成并执行任何代码之前,我不希望doSomething返回。我能想到的唯一解决方案是修改调用代码,将doSomething作为承诺处理。这样做的问题是,我最终不得不对调用该函数的函数做同样的事情,依此类推
有没有办法添加doSomethingElse,使doSomething仍然同步执行
一篇类似的帖子似乎暗示这是不可能的(但那是3年前的事了。也许从那时起就有了一些东西使之成为可能):
在以下情况下,你唯一的选择就是“开火然后忘记”:
function doSomething() {
var x = 0;
doSomethingElse();
// ...
return true;
}
您的doSomething方法也会返回一个承诺。
所以,把它当作正常的承诺
doSomething().then(boolean=>{
}).catch(e=>{
})
或
doSomethingElse返回了一个承诺,因此不能像您所展示的那样被称为。@androidDev哦,真的吗?这仍然是不可能的,而且可能永远也不会。
async function other(){
try{
let boolean = await doSomething();
// your other code
}catch(e){
// your error handler
}
}