将承诺值存储到变量中不解析nodejs。


所以我一直在纠结这个问题,我需要一些帮助。首先,我有一个类似于这样的api调用。

async function getJoke() {
  try {
    const res = await axios({
      "method": "GET",
      "url": "https://matchilling-chuck-norris-jokes-v1.p.rapidapi.com/jokes/random",
      "headers": {
        "content-type": "application/octet-stream",
        "x-rapidapi-host": "matchilling-chuck-norris-jokes-v1.p.rapidapi.com",
        "x-rapidapi-key": "**********",
        "accept": "application/json"
      }
    })

    return res.data.value

  } catch (err) {
    console.log(err)
  }
}

然后我有一个索引,我在那里调用这个函数 并试图将返回值分配给一个变量来使用。

async function tellJoke() {
    let joke = await getJoke()
    return joke
}

const data = tellJoke()
console.log(data)

console.log(data) 返回一个待定的承诺,而不是预期的返回值,我做错了什么?谢谢。

解决方案:

这是因为 async function的返回一个解析到其返回值的承诺。你不能写同步代码 await的承诺。

然而,你可以将你的代码包裹在一个异步IIFE中,就像这样。

async function tellJoke() {
    let joke = await getJoke()
    return joke
}

;(async function (){

const data = await tellJoke()
console.log(data)

})();

或者你可以使用 Promise.prototype.then. then 一旦承诺解决,就会执行指定的回调。

async function tellJoke() {
    let joke = await getJoke()
    return joke
}

tellJoke().then(data => {
    console.log(data)
})

给TA打赏
共{{data.count}}人
人已打赏
未分类

在熊猫中使用概率列随机抽样行。

2022-9-9 2:23:19

未分类

翩翩起舞 :- 行列布局-文字溢出和间隔符消失。

2022-9-9 2:23:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索