как эти две сигнатуры функций передаются в эквивалент then()?

#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 во втором случае.