Я могу пометить функцию javascript как «асинхронную» (т.е. возвращающую обещание) с async
ключевым словом. Нравится:
async function foo() {
// do something
}
Каков эквивалентный синтаксис для функций стрелок?
javascript
promise
async-await
arrow-functions
BonsaiOak
источник
источник
var foo = async () => await Promise.resolve('ha');
- отлично работаетit doesn't work
бессмысленно ... вы получаете ошибку? возможно, вы делаете что-то не так, без кода, который «не работает» и содержательного описания того, как он не работает, можете только догадываться, что вы делаете что-то не так (или используете старый браузер)Ответы:
Асинхронные функции стрелок выглядят так:
Асинхронные функции стрелок выглядят следующим образом для одного передаваемого аргумента :
Асинхронные функции стрелок выглядят так для нескольких передаваемых аргументов :
Анонимная форма работа , а также:
Функция асинхронной декларации выглядит следующим образом :
Использование асинхронной функции в обратном вызове :
источник
const foo = async () => {}
создает именованную асинхронную функцию с именемfoo
. Таким образом, вполне можно делать именованные функции (просто не поднимая). В ES2016 + присвоение анонимной функции переменной именует ее после переменной, если она там объявлена.foo = function bar () {}
который был создан для заменыarguments.callee
при написании рекурсивных анонимных функций. У вас есть переменная с именем,foo
которая является ссылкой на функцию.const foo = async () => {}
имя функцииfoo
- ecma-international.org/ecma-262/6.0/… и ecma-international.org/ecma-262/6.0/… - см. обсуждение в esdiscuss.org / тема /…somefunction
не может быть изменена после ее установки. (Это указывает на вашу анонимную асинхронную функцию.)Это самый простой способ назначить выражение
async
функции стрелки для именованной переменной:(Обратите внимание, что это не является строго эквивалентным
async function foo() { }
. Помимо различий междуfunction
ключевым словом и выражением стрелки , функция в этом ответе не «поднимается наверх» .)источник
foo = function myName () {}
. Имя есть,myName
и оно определено как существующее только внутри анонимной функции и не определенное нигде снаружи. Его цель - заменитьarguments.callee
при написании рекурсивных анонимных функций.foo.name === 'foo'
). Но только потому, что он находится в инициализатореconst
оператора *, что означает, что не совсем правильно называть это «именованным выражением функции асинхронной стрелки». Вы также правы, что имя выражения именованной функции ограничено только внутри собственного тела, но оно также хранится вname
свойстве функции , что удобно для отладки (и чаще всего я называю их именами).fn.name
а также наличие привязки в области видимости (переменная).Немедленно вызванная функция асинхронной стрелки:
Сразу же вызывается выражение асинхронной функции:
источник
Синтаксис функции асинхронной стрелки с параметрами
источник
Основной пример
источник
Вы также можете сделать:
источник