使用async的自调用函数的Javascript语法

使用async的自调用函数的Javascript语法,javascript,asynchronous,promise,arrow-functions,Javascript,Asynchronous,Promise,Arrow Functions,在JS中,In可以使用async编写一个自调用箭头函数,如下所示: (async () => { const promis = fetch(uri); console.log(await promis); })(); { // do something } 一个没有参数的自调用函数,我也可以这样写: (async () => { const promis = fetch(uri); console.log(await promis); })(

在JS中,In可以使用async编写一个自调用箭头函数,如下所示:

(async () => {
    const promis = fetch(uri);
    console.log(await promis);
})();
{
   // do something
}
一个没有参数的自调用函数,我也可以这样写:

(async () => {
    const promis = fetch(uri);
    console.log(await promis);
})();
{
   // do something
}
我在问自己,是否有一种语法可以将两者结合起来并做类似的事情,或者第一个例子已经是最短的形式了

// this is not working
async {
   const promis = fetch(uri);
   console.log(await promis);
}

不,你不能。
block语句
只会创建一个新的作用域,就像IIFE一样。然而,异步函数是异步执行的,不能用块来完成。

不,不能。
block语句
只会创建一个新的作用域,就像IIFE一样。然而,异步函数是异步执行的,不能用块来完成。

在Javascript语法中,
async
是函数的修饰符。因此,唯一可以
async
的就是函数

您的第二段代码只是一个块。它不会创建新函数或新函数作用域。而且,根据Javascript语法,不能对块使用
async
。例如,在该块中使用
var
声明的变量仍将被提升到包含函数作用域的顶部,因为这不会创建新的函数作用域

您的第三部分代码不起作用,因为
async
仅适用于函数,而不适用于块(根据Javascript规范)


如果你想要一段内联的
async
代码,你必须声明并执行一个函数,而你的第一个代码块就是一种简洁的方法。你必须有一个函数,而不仅仅是一个块。

在Javascript语法中,
async
是函数的修饰符。因此,唯一可以
async
的就是函数

您的第二段代码只是一个块。它不会创建新函数或新函数作用域。而且,根据Javascript语法,不能对块使用
async
。例如,在该块中使用
var
声明的变量仍将被提升到包含函数作用域的顶部,因为这不会创建新的函数作用域

您的第三部分代码不起作用,因为
async
仅适用于函数,而不适用于块(根据Javascript规范)


如果你想要一段内联的
async
代码,你必须声明并执行一个函数,而你的第一个代码块就是一种简洁的方法。你必须有一个函数,而不仅仅是一个块。

双向,我们只需要简短一点:)

  • 简单方法
  • !异步函数(){
    log(“e”,“yibu”);
    }();
    
    还是像你一样

    (异步()=>{
    log(“e”,“yibu”);
    })();
    //也许这比上面的更好
    ;(异步函数(){
    log(“e”,“yibu”);
    }());
    //这完全一样
    ;[异步函数(){
    log(“e”,“yibu”);
    }()];
    
  • 使用[然后]这不是绝对的“匿名”
  • var x=async()=>100;
    那么(
    e=>console.log({e})
    );
    
    双向,我们只需要短一点:)

  • 简单方法
  • !异步函数(){
    log(“e”,“yibu”);
    }();
    
    还是像你一样

    (异步()=>{
    log(“e”,“yibu”);
    })();
    //也许这比上面的更好
    ;(异步函数(){
    log(“e”,“yibu”);
    }());
    //这完全一样
    ;[异步函数(){
    log(“e”,“yibu”);
    }()];
    
  • 使用[然后]这不是绝对的“匿名”
  • var x=async()=>100;
    那么(
    e=>console.log({e})
    );
    
    第二个代码段不是没有参数的自调用函数,它只是一个块。例如,var声明的作用域不在第二个示例
    async
    属性函数中,因此初始语法尽可能简洁。第二个代码段不是没有参数的自调用函数,它只是一个块。例如,var声明的作用域不在第二个示例
    async
    属性函数中,因此初始语法尽可能简洁。说异步函数不是异步执行的有点误导。当您调用异步函数时,它将同步执行(直到第一个
    wait
    ),然后返回一个承诺。事实上,如果没有
    await
    ,它是完全同步执行的。说异步函数不是异步执行的有点误导。当您调用异步函数时,它将同步执行(直到第一个
    wait
    ),然后返回一个承诺。事实上,如果其中没有
    wait
    ,那么它是完全同步执行的。