Трудно понять разницу между Promise.resolve () и цепочкой обещаний - PullRequest
0 голосов
/ 05 мая 2018

Мне трудно понять, в чем разница между использованием Promise.resolve () и простым использованием обещания.

Объяснение кажется немного сложным, поэтому у меня есть небольшой пример:

Например, у меня есть метод, который возвращает обещание, как это:

requestPokemon() {
  return new Promise((resolve, reject) => {
    axios.get("https://pokeapi.co/api/v2/pokemon/1").then(value => {
      resolve(value);
    })
    .catch(error => {
      reject(error);
    })
  });
}

Итак, теперь я могу вызвать этот метод и связать обещание, я нахожу два способа сделать это и не могу получить его, когда Promise.resolve лучше или нет, моя проблема заключается в понимании этого.

так что я решил это двумя способами:

первый:

Promise.resolve(this.requestPokemon()).then(value => {
  this.pokemon = value.data.name;
}).catch(error => {
  console.log(error);
})

второй:

this.requestPokemon().then(value => {
  this.pokemon = value.data.name;
}).catch(error => {
  console.log(error);
})

пожалуйста, мне нужно небольшое объяснение недостатков и недостатков в том, чтобы сделать это одним способом выше другого, я очень ценю помощь.

Спасибо

1 Ответ

0 голосов
/ 05 мая 2018

Сначала вам не нужно создавать обещание (то есть antipattern ) в вашем requestPromise, просто верните одно из axios:

  requestPokemon() {
    return axios.get("https://pokeapi.co/api/v2/pokemon/1");
 }

Теперь давайте посмотрим на эту строку:

 Promise.resolve(this.requestPokemon()).then(/*...*/)

Это создаст новое обещание, которое разрешается или отклоняется, когда обещание Axios разрешает или отклоняет и добавляет к нему обработчик then. Так что это будет приковано примерно так:

 resolve() -> Promise (axios) -> Promise (Promise.resolve) -> then
 reject() -> Promise (axios) -> Promise (Promise.resolve) -> catch

Итак, как вы видите, Promise.resolve просто проходит через данные, так что на самом деле это излишне. Нам на самом деле просто нужно:

 resolve() -> Promise (axios) -> then
 reject() -> Promise (axios) -> catch

Что можно сделать с помощью:

 this.requestPokemon().then(/*...*/, /*...*/);

пожалуйста, мне нужно небольшое объяснение минусов и минусов при выполнении этого одним способом выше другого

Добавление Promise.resolve немного больше печатает и делает его менее читабельным, нет синтаксической разницы.

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