Javascript 如果应用程序中使用的所有函数都以'async'作为前缀,不管它是否真正异步,会发生什么情况?
我知道,如果一个函数是Javascript 如果应用程序中使用的所有函数都以'async'作为前缀,不管它是否真正异步,会发生什么情况?,javascript,promise,async-await,Javascript,Promise,Async Await,我知道,如果一个函数是async,那么它将返回一个承诺。但是,如果是这种情况,那么如果应用程序中使用的所有函数都以async作为前缀,即使它实际上不是异步的,会发生什么呢 这意味着调用它的主函数可能包含3种情况: 至少一个实际的异步函数 它调用的所有函数实际上都是异步的 它调用的函数实际上都不是异步的 但是,在上述所有条件下,被调用的函数都带有前缀async 在这种情况下会发生什么?所有async函数都会返回一个承诺。因此,如果对同步函数使用async,那么从函数中获取返回值的唯一方法是使用wa
async
,那么它将返回一个承诺。但是,如果是这种情况,那么如果应用程序中使用的所有函数都以async
作为前缀,即使它实际上不是异步的,会发生什么呢
这意味着调用它的主函数可能包含3种情况:
async
在这种情况下会发生什么?所有
async
函数都会返回一个承诺。因此,如果对同步函数使用async
,那么从函数中获取返回值的唯一方法是使用wait
或.then()
。对于一个纯粹的同步函数,这使得接口的使用变得不那么简单。因此,在没有意义的情况下使用async
,会使函数更难编程
可以这样做,然后调用方只需使用wait
或.then()
即可获得任何返回值。我个人不会使用async
,除非操作确实是异步的
在promise对象中封装同步返回值的效率也会降低,这会导致不必要的创建,然后在使用
async
的每个同步函数调用中对promise进行垃圾收集。对于偶尔调用的函数,这一点不太可能被注意到。对于一个可能被称为lots或紧密循环的函数,或者当多次调用代码中对性能敏感的部分时,这一点可能非常明显。Allasync
函数返回一个承诺。因此,如果对同步函数使用async
,那么从函数中获取返回值的唯一方法是使用wait
或.then()
。对于一个纯粹的同步函数,这使得接口的使用变得不那么简单。因此,在没有意义的情况下使用async
,会使函数更难编程
可以这样做,然后调用方只需使用wait
或.then()
即可获得任何返回值。我个人不会使用async
,除非操作确实是异步的
在promise对象中封装同步返回值的效率也会降低,这会导致不必要的创建,然后在使用
async
的每个同步函数调用中对promise进行垃圾收集。对于偶尔调用的函数,这一点不太可能被注意到。对于一个可能被称为lots或紧密循环的函数,或者在代码的性能敏感部分被多次调用时,这一点可能非常明显。异步函数返回承诺,即使该函数没有返回任何内容。
即使里面没有代码:
async function play(){
}
即使这样,也会回报一个承诺。因此,这概括了您的所有情况。异步函数返回承诺,即使您没有从该函数返回任何内容。 即使里面没有代码:
async function play(){
}
即使这样,也会回报一个承诺。因此,这是您所有案例的缩影。它们都会返回需要等待的承诺,这会导致大量开销,并会重新安排每个函数调用。这样做没有意义。它们都会返回承诺,但它们的评估仍然是同步的,因为即使是
async
函数也会同步运行,直到第一个等待
。然而,等待它们的代码将变得真正异步,因为即使同步结算的承诺也只会在下一个滴答声时调用它们的回调!因此,正如@deceze所写的,这只会降低您(和其他人)的代码的性能和复杂性。他们都会返回需要等待的承诺,导致大量开销,并重新安排每个函数调用。这样做没有意义。它们都会返回承诺,但它们的评估仍然是同步的,因为即使是async
函数也会同步运行,直到第一个等待
。然而,等待它们的代码将变得真正异步,因为即使同步结算的承诺也只会在下一个滴答声时调用它们的回调!因此,正如@deceze所写的,这只会降低您(和其他人)的代码的性能,使其更复杂。