gpt4 book ai didi

javascript - 异步函数返回 Promise 挂起

转载 作者:行者123 更新时间:2023-12-05 00:54:39 24 4
gpt4 key购买 nike

我不明白为什么我得到 Promise { <pending> }因为我使用了异步/等待

这是我的代码

const  fetch = require("node-fetch")

function getRandomPokemon() {
var pokemonID = Math.floor(Math.random() * 851);
console.log("The Pokemon Id is " + pokemonID);
return pokemonID
}

async function getJSON() {
let response = await fetch('https://pokeapi.co/api/v2/pokemon/'+ pokemonID);
var json = await response.json
}

var pokemonID = getRandomPokemon()
var json = getJSON()
console.log(json)

最佳答案

所有 async 函数都返回一个 promise - 总是。在 async 函数中使用 await 会暂停该函数的执行,直到您等待的 promise 解决或拒绝,但 async 函数不会阻塞到外面的世界。 await 不会暂停整个 js 解释器的执行。

async 函数中的第一个 await您的函数将一个 promise 返回给调用者和调用者继续执行。当函数最终在未来某个时间完成其工作时,该 promise 将被解决或拒绝。

I don't understand why i get Promise { } since i used async/await

因为所有 async 函数都会返回一个 promise 。


您的代码中有很多问题:

  1. 您的 getJSON() 函数没有返回值。这意味着它返回的 Promise 解析为 undefined,因此无法返回其值。
  2. await response.json 需要是 await response.json()
  3. pokemonID​​ 应该作为参数传递,而不仅仅是填充到更高范围的变量中。
  4. 在调用getJSON()时,必须在其上使用.then()await来从返回的值中获取解析值 promise 。

您可能还注意到您的 getJSON() 函数没有返回值。这意味着它返回的 promise 也解析为 undefined。而且,await response.json 需要是 await response.json()

您的代码需要更像这样:

async function getJSON(id) {
const response = await fetch('https://pokeapi.co/api/v2/pokemon/'+ id);
const json = await response.json();
return json;
}

const pokemonID = getRandomPokemon();
getJSON(pokemonID).then(data => {
console.log(data);
}).catch(err => {
console.log(err);
});

关于javascript - 异步函数返回 Promise 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65912986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com