【问题标题】:Promise not resolved承诺未解决
【发布时间】:2020-03-16 07:09:43
【问题描述】:

我需要这个 axios 调用的结果。我尝试了很多方法,但我无法解决承诺。我总是收到状态已解决的承诺待处理,并且 [[PromiseValues]] 这是我尝试过的最后一个:

function getResult() {
  let promise = new Promise(function(resolve, reject) {
    resolve(axios.get(URL))
  });

  return promise;
};

let theResult = getResult().then(function(result) {
  return result.data
});

【问题讨论】:

  • axios.get(URL) - 已经是一个承诺了。做axios.get(URL).then(result => result.data);
  • 它返回 Promise {} proto: Promise [[PromiseStatus]]: "resolved" [[PromiseValue]]: Array(9) 我不知道如何获取值
  • @LadyCrispy 那是因为你试图在它完成之前console.log它。
  • 我怎样才能改用theResult?因为当我尝试使用它时,它说它是未定义的

标签: javascript promise axios es6-promise


【解决方案1】:

axios.get - 一个返回 Promise 的方法。

要么

axios.get(URL).then(result => result.data);

function getResult(url) {
  return axios.get(url);
};

let theResult = getResult('<URL goes here>').then(function(result) {
  return result.data
});

【讨论】:

  • 我认为问题在于 OP 以某种方式期望 theResult 成为他们的价值,但它仍然是一个承诺(应该如此)。
【解决方案2】:

你不能通过 var data = getResult(url); 期望从 Promise 中返回值。 data 将具有 promise 对象,该对象具有其状态和值(如果已解决或被拒绝)。

function getResult() {
    let promise = new Promise(function (resolve, reject) {
        resolve(axios.get("https://api.github.com/users/mralexgray/repos"))
    });

    return promise; 
};

getResult().then((result) => {

    let theResult = result.data;

    /** process result **/


}).catch((err) => {
    console.log(err, "error");
})

您正在将您的promise 解析为另一个承诺axios.get(URL),因为即使在调用resolve 之后,您也会获得pending 作为状态。尝试使用任何其他值(非承诺)来解决它,您将获得已解决状态。

我建议你通过article.

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2019-09-29
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多