Javascript 异步箭头函数的语法

Javascript 异步箭头函数的语法,javascript,promise,async-await,arrow-functions,Javascript,Promise,Async Await,Arrow Functions,我可以使用async关键字将JavaScript函数标记为“async”(即返回承诺)。像这样: async function foo() { // Do something } 箭头函数的等效语法是什么?异步箭头函数如下所示: constfoo=async()=>{ //做点什么 } 异步箭头函数对于传递给它的单个参数,如下所示: const foo=async evt=>{ //用evt做点什么 } 异步箭头函数对于传递给它的多个参数,如下所示: constfoo=async(ev

我可以使用
async
关键字将JavaScript函数标记为“async”(即返回承诺)。像这样:

async function foo() {
  // Do something
}

箭头函数的等效语法是什么?

异步箭头函数如下所示:

constfoo=async()=>{
//做点什么
}

异步箭头函数对于传递给它的单个参数,如下所示:

const foo=async evt=>{
//用evt做点什么
}

异步箭头函数对于传递给它的多个参数,如下所示:

constfoo=async(evt,回调)=>{
//用evt做点什么
//返回带有回调的响应
}
匿名表单也起作用:

const foo=async function(){
//做点什么
}
异步函数声明如下所示:

异步函数foo(){ //做点什么 } 在回调中使用异步函数

constfoo=event.onCall(异步()=>{
//做点什么
})
类中使用

async foo(){
//做点什么
}

这是将
异步
箭头函数表达式分配给命名变量的最简单方法:

const foo = async () => {
  // do something
}
(请注意,这并不是严格等同于异步函数foo(){}
。此外,此答案中的函数不是。)

您还可以执行以下操作:

 YourAsyncFunctionName = async (value) => {

    /* Code goes here */

}

立即调用的异步箭头函数:

(async () => {
    console.log(await asyncFunction());
})();
立即调用的异步函数表达式:

(async function () {
    console.log(await asyncFunction());
})();

带参数的异步箭头函数语法

const myFunction = async (a, b, c) => {
   // Code here
}

基本示例

folder=async()=>{
let fold=等待getFold();
//等待localStorage.save('folder');
回折;
};
我的异步函数

const getAllRedis = async (key) => {
  let obj = [];

  await client.hgetall(key, (err, object) => {
    console.log(object);
    _.map(object, (ob)=>{
      obj.push(JSON.parse(ob));
    })
    return obj;
    // res.send(obj);
});
}
相当于:

const foo = async () => {
   // do something
}
const foo = async arg1 => {
  // do something with evt
}
 const foo = async (arg1, arg2) => {
    // do something
 }
如果使用一个参数调用foo,如以下示例所示:

async function foo(arg1) {
  // do something
}
async function foo(arg1, arg2) {
  // do something
}
相当于:

const foo = async () => {
   // do something
}
const foo = async arg1 => {
  // do something with evt
}
 const foo = async (arg1, arg2) => {
    // do something
 }
如果使用两个或更多参数调用foo,如以下示例所示:

async function foo(arg1) {
  // do something
}
async function foo(arg1, arg2) {
  // do something
}
相当于:

const foo = async () => {
   // do something
}
const foo = async arg1 => {
  // do something with evt
}
 const foo = async (arg1, arg2) => {
    // do something
 }
对于一个内部有等待使用的实际示例:

const foo = async () => await Promise.resolve('done');

值得注意的是,至少firefox和babel允许您这样做
var foo=async()=>wait Promise.resolve('ha')-很好用说它不起作用是没有意义的。。。你有错误吗?也许你在做其他错误的事情,如果没有“不起作用”的代码和对它如何不起作用的有意义的描述,你只能猜测你在做错误的事情(或使用旧浏览器),这可能是@Pointy,但它在当前的firefox、chrome和node.js(7.7.4)中本机工作有一节是关于async arrow function definitions@Pointy的。OP似乎在寻找一个命名的异步arrow函数,而您没有显示该函数的语法。实际上,
const foo=async()=>{}
创建了一个名为
foo
的命名异步函数。这样做命名函数是完全可能的(只是不需要提升)。在ES2016+中,如果在变量后面声明了匿名函数,则将其命名为变量。@BenjaminGruenbaum请不要将其命名为命名函数。在js中,命名匿名函数是一种非常特殊的语法
foo=function bar(){}
,创建该语法是为了在编写递归匿名函数时替换
参数.callee
。您所拥有的是一个名为
foo
的变量,它是对函数的引用。@slebetman从ES2015开始,当您执行
const foo=async()=>{}
时,函数的名称被设置为
foo
,-请参阅@FarisRayhan中的讨论,它与其他常量一样,变量
somefunction
的引用在设置后无法更改。(它指向匿名异步函数。)注意,命名函数表达式在javascript中是一种非常特殊的语法。这不是命名函数表达式。当一个短语可以演变成两个意思时,使用正确的词语对于避免以后的混淆很重要。仅供参考,命名函数表达式是:
foo=function myName(){}
。名称为
myName
,它被指定为仅存在于匿名函数内部,而不在外部任何地方定义。它的目的是在编写递归匿名函数时替换
参数。被调用方
。我正要就技术性问题与@slebetman争论,因为这是一个(箭头)函数表达式,最终会得到一个命名函数(即
foo.name=='foo'
)。但这仅仅是因为它位于
const
*语句*的初始值设定项中,这意味着将其称为“命名异步箭头函数表达式”是不正确的。您还可以正确地看到,命名函数表达式的名称仅绑定在它自己的主体内,但它也存储在函数的
name
属性中,这对于调试来说很好(这也是我命名它们的原因)。换句话说,没有“命名箭头函数表达式”这样的东西,但它可以变成“命名的”通过成为const或let语句的一部分(由于提升而不确定var),在某种意义上,有一个名称
fn.name
,并且在范围(变量)中有一个绑定。使用一个参数,您不需要括号。YourAsyncFunctionName=async value=>{/*代码在这里*/}@TakácsZsolt它是一个偏好问题。贾斯汀所做的并没有错。我想加上括号,以防将来添加更多参数。请编辑您的答案,解释此代码如何回答该问题,并改进该问题已有的许多向上投票的答案,以便对具有类似问题的其他用户有用。对于堆栈溢出,不鼓励使用仅代码的答案,因为它们没有解释堆栈溢出是如何解决问题的。