首页 > 解决方案 > 为什么我需要在承诺中解决响应

问题描述

我有如下承诺:

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));line by会发生什么resolve("aaaa");

任何人都可以帮助我吗?谢谢你。

标签: javascriptvue.jspromiseaxios

解决方案


值得一提的是axios.post()已经返回 a 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仅当您没有链接现有的 Promise 时,才需要构造一个新对象,如下例所示:

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

delay(1000).then(() => {
  console.log('this code is delayed by 1s');
});

推荐阅读