Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加异步等待而不必修改父调用函数_Javascript - Fatal编程技术网

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

Javascript 添加异步等待而不必修改父调用函数,javascript,Javascript,在我的Javascript应用程序中,我有时发现我需要修改一段最初同步运行的代码,并添加一些异步运行的代码 之前: function doSomething() { var x = 0; ... return true; } 之后: async function doSomething() { var x = 0; await doSomethingElse(); ... return true; } 很多时候这很好。但是,如果另一个函数正在

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

之前:

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
    }
}