async
- синтаксический сахар для обычной функции, которая возвращает обещание.Если функция не использует await
, ей не выгодно быть async
.
Если API, принимающий обратный вызов, не использует обещание, которое она возвращает, это потенциальная проблема.Допустимо использовать обещания и, следовательно, async
, если эта проблема решена.Поскольку API не будет обрабатывать отклонения, они должны обрабатываться пользователем:
verify = async (username: string, password: string, done: (error: any, user?: any) => void): Promise<void> => {
try {
// reads from the database asynchronously...
done(null, user);
} catch (err) {
done(err);
}
}
Не вызывая done
обратный вызов приведет к некорректному поведению, даже если возвращенное обещание выполнено.
Но я передал асинхронный обратный вызов в этот конструктор, в функции синхронизации
PassportBasicStrategy
принимает потенциально асинхронные обратные вызовы, поэтому обратные вызовы имеют параметр done
.Не имеет значения, является ли функция async
или нет, если возвращаемое обещание ни на что не влияет.