我不明白为什么我得到 Promise { <pending> }
,因为我使用了 async/await
这是我的代码
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)
答案 0 :(得分:3)
三个问题:
getJSON()
不返回任何内容。它需要以 return json;
结尾。async
使其返回一个 promise。如果你想直接得到返回值而不是一个promise,你必须用await getJSON()
来调用它。只有当您从另一个异步函数调用它时才能这样做。response.json
:var json = response.json();
答案 1 :(得分:1)
所有 async
函数都会返回一个 promise - 始终。在 await
函数内使用 async
会挂起该函数的执行,直到您等待的承诺解决或拒绝,但 async
函数不会阻止外部世界。 await
不怀疑整个 js 解释器的执行。
在 await
函数中的第一个 async
处,您的函数向调用方返回一个承诺,并且调用方继续执行。当函数最终在未来某个时候完成其工作时,该承诺会被解决或拒绝。
我不明白为什么我得到 Promise { } 因为我使用了 async/await
因为所有 async
函数都返回一个 promise。
您的代码中有很多问题:
getJSON()
函数没有返回值。这意味着它返回的 promise 会解析为 undefined
,因此无法返回其值。await response.json
必须是 await response.json()
。pokemonID
应该作为参数传递,而不仅仅是填充到更高范围的变量中。getJSON()
时,您必须对其使用 .then()
或 await
才能从返回的 Promise 中获取已解析的值。您可能还注意到您的 getJSON()
函数没有返回值。这意味着它返回的承诺也解析为 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);
});
答案 2 :(得分:-1)
response.json
应该是一个函数。
在您的 getJSON
函数定义中,您正在执行 await response.json
。
将其更改为 await response.json()
。
注意 json() 后面的括号。
由于 getJSON
函数返回 promise,您必须等待响应
在倒数第二行,添加 var json = await getJSON();
此外,为了使用 await
,您必须将代码包装在异步函数中
将最后一行和倒数第二行包裹在一个异步函数中
async function resolveJSON(){
var json = await getJSON(); // waits for the promise to fulfill
console.log(json);
}
答案 3 :(得分:-1)
只是一些变化
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();
return json
}
var pokemonID = getRandomPokemon();
getJSON().then((json) => {
console.log(json);
});