Как .ten передает результаты вызывающей функции своему обещанию? - PullRequest
1 голос
/ 29 февраля 2020

Я прошел через несколько вопросов, похожих на этот, но не смог найти один для этого конкретного c бита. У меня проблемы с пониманием. Я вставлю код, что он выводит, что мне трудно понять, и, возможно, кто-то может указать, что мне не хватает:

async function add(x, y) {
 return x + y
}

add(1,2).then((result) => {
 console.log(result)
})

3

Пока я знаю, что asyn c работает в JS всегда будет возвращать обещание, но мое понимание обещаний состоит в том, что они принимают две функции обратного вызова в качестве параметров: один для разрешения обещания, а другой - для случая, когда возникает ошибка. Как компилятор узнает, как передать результат от функции add в обратный вызов разрешения возвращенного обещания? Предполагается ли просто, что при вызове .then первым параметром обратного вызова разрешения обещания будет возвращаемое значение вызывающей функции?

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Если вы знакомы с тем, как работает Promises (функция " resol "), то фрагмент кода ниже может быть полезен.

async function add(x, y) {
 return x + y
}

add(1,2).then((result) => {
 console.log(result)
})

//can be written as

function add2 (x,y){
  return new Promise((resolve,reject)=>{
   resolve(x+y);
  })
}

add2(1,2).then((result) => {
 console.log(result)
})
0 голосов
/ 29 февраля 2020

Пока я знаю, что функции asyn c в JS всегда будут возвращать обещание, но я понимаю, что обещания принимают в качестве параметров две функции обратного вызова: один для разрешения обещания, а другой когда он встречает ошибку.

Это относится к конструктору Promise. Она принимает функцию разрешения и отклонения, одну из которых (разрешение) вы вызываете со значением для разрешения обещания, а другую (отклонение) вы вызываете с ошибкой для выброса. Однако функции asyn c немного отличаются. Когда они возвращают значение, они фактически возвращают обещание, которое разрешает к значению, которое они возвращают. Если есть ошибка, то отклоняет и выдает ошибку обещания. Кроме того, Promise.prototype.then всегда будет обрабатывать значение, которое разрешает обещание, а Promise.prototype.catch всегда будет обрабатывать ошибку, которую обещание отклоняет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...