Почему мне нужно разрешить ответ в обещании - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть обещание, как показано ниже:

let promise = new Promise((resolve, reject) => {
  axios.post("https://httpbin.org/post", params, header)
    .then(response => {
      resolve(Object.assign({}, response.data));
      // resolve("aaaa");
      console.log(response);
    })
    .catch(error => reject(error))
});

Почему мне нужно разрешить это обещание с помощью данных ответа?

Что произойдет, если я заменю строку resolve(Object.assign({}, response.data)); на resolve("aaaa");?

Кто-нибудь может мне помочь?Спасибо.

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Стоит отметить, что axios.post() уже возвращает Promise, поэтому вам не нужно заключать его в другое обещание.

Это будет работать вместо:

let promise = axios.post("https://httpbin.org/post", params, header)
  .then(response => {
    console.log(response);
    return Object.assign({}, response.data);
  });

// Later on...
promise.then(data => {
  console.log('Request successful:', data);
}, err => {
  console.log('Request failed:', err);
});

ПостроениеНовый Promise объект необходим только тогда, когда вы не связываете существующее обещание, как в этом примере:

function delay(duration) {
  return new Promise(resolve => setTimeout(resolve, duration));
}

delay(1000).then(() => {
  console.log('this code is delayed by 1s');
});
0 голосов
/ 27 февраля 2019

Обещания имеют два аргумента, resolve и reject, которые используются для отправки ответа обратно на вызывающий код.Если ваше обещание выполнило свой код без ошибок, то вы resolve() отправили ответ (он может быть любым, каким вы хотите), а если вместо этого произошел сбой, вы reject() отправили ошибку, как параметр.

Параметр функции разрешения будет отправлен обратно в вызывающую функцию в обратном вызове затем , а параметр функции отклонения можно найти в обратном вызове catch ,

Например,

function myFunction(){
    return new Promise((resolve, reject) => {
        try{
            /* Do some async calls here */
            resolve(result); //Result is what you will find in "then"
        }catch(e){
            reject(e);
        }
    });
}

myFunction().then((response) => {
    /* Your logic here*/
}).catch((err) => {
    console.error(err);
}

Вы можете представить resolve как return в асинхронном контексте, в то время как reject похож на throw с исключением, которое будетбыть пойман вызывающим кодом.

Таким образом, resolve(myVariable) вернет myVariable коду, который вызвал функцию обещания, в то время как resolve('aaa') всегда вернет "aaa" к вызывающему коду.

0 голосов
/ 27 февраля 2019

Все, что он будет делать, это вызвать успешный обратный вызов resolve с аргументом "aaaa" вместо его исходного значения.

Допустим, вы передаете функцию обратного вызова console.log.Если обещание разрешается, то есть успешно, то обратный вызов будет вызван с переданным аргументом (console.log("aaaa"))

Если он не разрешится - если он неуспешен - будет вызван обратный вызов rejectсогласно вашему .catch() заявлению.

0 голосов
/ 27 февраля 2019

resolve() делает именно то, что говорит имя: он разрешает обещание, возвращая значение внутри вызова функции.

Так что, если у вас есть обещание, и оно разрешается с помощью resolve('aaaaa'), это означает, что ваше обещаниевернет успешное состояние со значением 'aaaaa'.

Вы также можете отклонить обещание.Это будет означать, что звонок, который вы сделали, потерпел неудачу в какой-то момент.Аналог resolve(), reject() принимает параметр, который должен быть возвращен обещанием.

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