Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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 如果应用程序中使用的所有函数都以'async'作为前缀,不管它是否真正异步,会发生什么情况?_Javascript_Promise_Async Await - Fatal编程技术网

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或紧密循环的函数,或者当多次调用代码中对性能敏感的部分时,这一点可能非常明显。

    All
    async
    函数返回一个承诺。因此,如果对同步函数使用
    async
    ,那么从函数中获取返回值的唯一方法是使用
    wait
    .then()
    。对于一个纯粹的同步函数,这使得接口的使用变得不那么简单。因此,在没有意义的情况下使用
    async
    ,会使函数更难编程

    可以这样做,然后调用方只需使用
    wait
    .then()
    即可获得任何返回值。我个人不会使用
    async
    ,除非操作确实是异步的


    在promise对象中封装同步返回值的效率也会降低,这会导致不必要的创建,然后在使用
    async
    的每个同步函数调用中对promise进行垃圾收集。对于偶尔调用的函数,这一点不太可能被注意到。对于一个可能被称为lots或紧密循环的函数,或者在代码的性能敏感部分被多次调用时,这一点可能非常明显。

    异步函数返回承诺,即使该函数没有返回任何内容。 即使里面没有代码:

    async function play(){
    
    }
    

    即使这样,也会回报一个承诺。因此,这概括了您的所有情况。

    异步函数返回承诺,即使您没有从该函数返回任何内容。 即使里面没有代码:

    async function play(){
    
    }
    

    即使这样,也会回报一个承诺。因此,这是您所有案例的缩影。

    它们都会返回需要等待的承诺,这会导致大量开销,并会重新安排每个函数调用。这样做没有意义。它们都会返回承诺,但它们的评估仍然是同步的,因为即使是
    async
    函数也会同步运行,直到第一个
    等待
    。然而,等待它们的代码将变得真正异步,因为即使同步结算的承诺也只会在下一个滴答声时调用它们的回调!因此,正如@deceze所写的,这只会降低您(和其他人)的代码的性能和复杂性。他们都会返回需要等待的承诺,导致大量开销,并重新安排每个函数调用。这样做没有意义。它们都会返回承诺,但它们的评估仍然是同步的,因为即使是
    async
    函数也会同步运行,直到第一个
    等待
    。然而,等待它们的代码将变得真正异步,因为即使同步结算的承诺也只会在下一个滴答声时调用它们的回调!因此,正如@deceze所写的,这只会降低您(和其他人)的代码的性能,使其更复杂。