#javascript #async-await
#javascript #async-await
Вопрос:
async function f() {
return 2
}
//example A
f().then( d => console.log(d) ) //output = 2
//example B
f().then(console.log) //output = 2
В примере A результат (число 2) передается как переменная d . Это всего лишь базовая функция жирной стрелки.
В примере B результат (число 2), похоже, волшебным образом помещается в console.log. Каков базовый механизм, с помощью которого число 2 превращается в console.log(2)?
Комментарии:
1. Как вы думаете, как присваивается значение
d
в функции arrow? Вы можете передать любую функцию.then
, и ей будет передано значение разрешения обещания.2.
.then
принимает функцию.console.log
это функция. Так и естьd => console.log(d)
. И они оказываются одной и той же функцией.
Ответ №1:
Then принимает обратный вызов в качестве аргумента и передает результат в качестве параметра.
Итак, по сути, //пример A f().then( d => console.log(d) ) //output = 2
такой же, как
const myFunc = d => console.log(d);
f().then( myFunct ) //output = 2
При передаче функции arrow вы создаете этот встроенный обратный вызов. Даже здесь параметр на самом деле не столько ссылается на результат, сколько задает параметр для создаваемой функции.
При передаче в консоли.зарегистрируйте свое назначение консоли.регистрируйте функцию как обратный вызов.
Комментарии:
1. ах. моя ошибка заключалась в том, что я думал, что тогда передается результат. Это не так. Передается функция обратного вызова. затем просто передает результат функции обратного вызова. Спасибо.
Ответ №2:
Как указано в документации MDN для then: Метод then() возвращает обещание. Требуется до двух аргументов: функции обратного вызова для случаев успеха и неудачи обещания.
Итак, в первом примере вы предоставляете в качестве аргумента разрешения функцию :
(d) => {
console.log(d);
}
Во втором вы предоставляете в качестве аргумента разрешения функцию:
console.log
Обе функции вызываются с возвращаемым значением асинхронной функции f(): 2. В случае ошибки вы не предоставляете аргумент отклонения, поэтому функция не будет вызвана, и код завершится ошибкой.
Ответ №3:
консоль.журнал — это функция. и значение, которое возвращается после .then(), будет передано в входящую в него функцию; функция является консольной.войдите в свой случай. Они такие же, если вы просто печатаете значение, но вторая подпись аккуратнее! Кроме того, вы не можете предоставить переменную reject во втором случае.