#javascript #asynchronous #async-await #callback
Вопрос:
как показано ниже, асинхронная функция была задана для параметра, где ожидалась несинхронная функция, но она работала, почему?
function getCallback(param, callback) { setTimeout(() =gt; { callback amp;amp; callback(param); }, 1); } getCallback(13, async (param) =gt; { console.log(param); }); --- 13
Комментарии:
1. Потому что и
async function
выражения, иfunction
выражение создают объекты вызываемых функций … Почему вы ожидали, что это не сработает?2.
getCallback
ничего не делает с возвращаемым значениемcallback
, поэтому это не влияет на тоcallback
, возвращает обещание или нет. И возвращение обещания-это, в значительной степени, единственная отличительная особенностьasync
функции, если смотреть со стороны.3. Хорошо, если ваш обратный звонок вернет что-то важное. Например, если бы обратный вызов ожидал номер, он не работал бы и т. Д..
Ответ №1:
Это сработало, почему?
Потому async
что функция-это просто функция, которая возвращает обещание и может быть вызвана, как и любая другая функция. Вы getCallback
игнорируете возвращаемое значение callback()
, поэтому не имеет значения, что оно возвращает.
Можно ли передавать
async
функцию там, где она неasync
нужна?
Нет, обычно недопустимо передавать async
функцию (или другую функцию, возвращающую обещание) функции, которая не ожидает, что обратный вызов вернет обещание. Обещания не следует игнорировать, они должны быть .then()
скованы цепью или await
изменены, и они нуждаются в специальной обработке ошибок. Если getCallback
ошибка не обрабатывает (обещает) ошибки, вы не должны передавать обратный вызов с ошибками.
Комментарии:
1. спасибо~ Я предположил, что «асинхронность» — это своего рода конструктор, который возвращает объект, подобный python.