【问题标题】:Returning promise instead of data返回承诺而不是数据
【发布时间】:2021-01-13 21:34:44
【问题描述】:

在我为从 API 获取数据而编写的以下代码中,我将 promise 作为输出而不是数据。我错过了什么?有人可以帮忙吗?

const axios = require('axios');

const ageFinder = async (userName) => {

    try {
        let userDetails =await axios.get(`https://hacker-news.firebaseio.com/v0/user/${userName}.json`)
        let user =userDetails.data
        return user
    } catch(err) {
        console.log(err.message)
    }
}

console.log(ageFinder("someUser"))

【问题讨论】:

标签: javascript node.js axios


【解决方案1】:

根据MDN page on async functions,任何声明为async 的函数都会返回一个promise,该promise 会解析函数returns 的任何内容,或者如果在函数中遇到任何错误则拒绝(请参阅页面的“返回值”部分)上面链接)。

因此,您需要在记录之前将您的函数调用 ageFinder("someUser") 放入另一个异步函数中,并将其结果放入 await,或者您可以使用 .then()

【讨论】:

  • 我按照您建议的步骤进行操作。但是,它仍然在做同样的事情。它记录promise pending,然后记录整个响应。如果我必须返回一些东西并在另一个函数中使用它,我只会得到“未决的承诺”,这是无用的
  • 在您的ageFinder 函数中,在catch 块中,尝试添加return {message: e.message || "AN ERROR OCCURRED"}
  • 所以这里有些奇怪。我想将该函数用作另一个文件中的模块。所以我只是导入它来看看它是如何工作的。令人惊讶的是,该模块在那里按预期工作。我很困惑
  • await 你导入函数的结果了吗?此外,在运行您的问题中提到的 sn-p 时,您是否传递了一些虚拟值,并且在导入模块的文件中,您将参数传递给您知道是有效的 userName 的函数?如果您提供更多详细信息会有所帮助。
  • 我确实在等待是的
【解决方案2】:

async 函数总是返回一个承诺。要使用它,您需要在另一个 async 函数中 await 它。如果您不想在另一个async 函数中使用await,您可以将它与替代then 方法一起使用。例如:

ageFinder("someUser")
.then((response) => {
  console.log(response);
}).
.catch((err) => {
  console.log(err);
});

【讨论】:

  • 这工作得很好......问题是我知道异步函数总是返回承诺,但我需要一个返回值。 console.log 没问题,但我如何获得返回值。我已经尝试过所有使用等待的方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
相关资源
最近更新 更多