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它是一个偏好问题。贾斯汀所做的并没有错。我想加上括号,以防将来添加更多参数。请编辑您的答案,解释此代码如何回答该问题,并改进该问题已有的许多向上投票的答案,以便对具有类似问题的其他用户有用。对于堆栈溢出,不鼓励使用仅代码的答案,因为它们没有解释堆栈溢出是如何解决问题的。