[英]weird error when using javascript async/await syntax
我试图从随机用户 api 中获取随机用户。 代码来自我的 vue 前端。
// api response
{ info: { // ommited }, results: [ {//random user data} ] }
// this works
async get_random_user() {
const url = "https://randomuser.me/api/";
const res = await fetch(url);
const json_data = await res.json();
const result = json_data.results[0];
return result;
}
// this throws Uncaught (in promise) TypeError: Cannot read property '0' of undefined
async get_random_user() {
const url = "https://randomuser.me/api/";
const res = await fetch(url);
const result = await res.json().results[0];
return result;
}
为什么第二个 function 不起作用? 谢谢。
const result = await res.json().results[0];
您正在直接访问结果数据(可能尚未确定/产生),而不是等待res.json()完成处理
编辑
尚不能保证 res.json() 会产生任何数据,或者根本不会有任何适当的响应。 所以访问数据还不合理
await 被调用 results[0] 它没有被调用 res.json();
为简化起见,您实际上在做的是
results = res.json();
const result = await results[0];
所以这有两个逻辑错误
await
期望得到promise
作为回报。 json()
返回这样一个 promise,但json().results
只是一个object
(甚至在开始时未定义)。 这就是为什么await
在该结构上不起作用的原因。
检查 res.json().results 是否不是空数组;
const result = (await res.json()).results.[0];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.