为什么通过其索引 return 未定义访问 JavaScript 数组项
Why does accesing a JavaScript array item through it's index return undefined
我有一个 JavaScript 脚本,它通过获取 api 向 api 发出请求,然后将 json 响应推送到列表,我想通过它的索引访问列表中的响应对象,但项目 returns 未定义,就像它不在列表中一样。
我试过这个:
let trendingMoviesDetails = []
fetch(`https://api.themoviedb.org/3/movie/529203?api_key=${key}&language=en-US&append_to_response=videos,release_dates`)
.then(response => response.json())
.then(response => {trendingMoviesDetails.push(response)})
console.log(trendingMoviesDetails, trendingMoviesDetails[0])
但是为什么控制台打印出trendingMoviesDetails[0]
为undefined
。这是 chrome:
的结果
[]0: {adult: false, backdrop_path: '/fmIp40ev4VGquK2bMo52PQgaV2d.jpg', belongs_to_collection: {…}, budget: 65000000, genres: Array(5), …}length: 1[[Prototype]]: Array(0)
undefined
这是因为fetch
是异步的。您正在 then
处理程序中推送一些值 - 这意味着它将在 fetch
承诺得到解决后执行,同时尝试访问该处理程序之外的 [0]
值。
您可以将在上述承诺解析后必须调用的所有代码放入该处理程序中,或者像这样使用 async/await
:
async function someFunc() {
let trendingMoviesDetails = [];
const response = await fetch(`https://api.themoviedb.org/3/movie/529203?api_key=${key}&language=en-US&append_to_response=videos,release_dates`);
const json = await response.json();
trendingMoviesDetails.push(json);
console.log(trendingMoviesDetails, trendingMoviesDetails[0])
}
我有一个 JavaScript 脚本,它通过获取 api 向 api 发出请求,然后将 json 响应推送到列表,我想通过它的索引访问列表中的响应对象,但项目 returns 未定义,就像它不在列表中一样。
我试过这个:
let trendingMoviesDetails = []
fetch(`https://api.themoviedb.org/3/movie/529203?api_key=${key}&language=en-US&append_to_response=videos,release_dates`)
.then(response => response.json())
.then(response => {trendingMoviesDetails.push(response)})
console.log(trendingMoviesDetails, trendingMoviesDetails[0])
但是为什么控制台打印出trendingMoviesDetails[0]
为undefined
。这是 chrome:
[]0: {adult: false, backdrop_path: '/fmIp40ev4VGquK2bMo52PQgaV2d.jpg', belongs_to_collection: {…}, budget: 65000000, genres: Array(5), …}length: 1[[Prototype]]: Array(0)
undefined
这是因为fetch
是异步的。您正在 then
处理程序中推送一些值 - 这意味着它将在 fetch
承诺得到解决后执行,同时尝试访问该处理程序之外的 [0]
值。
您可以将在上述承诺解析后必须调用的所有代码放入该处理程序中,或者像这样使用 async/await
:
async function someFunc() {
let trendingMoviesDetails = [];
const response = await fetch(`https://api.themoviedb.org/3/movie/529203?api_key=${key}&language=en-US&append_to_response=videos,release_dates`);
const json = await response.json();
trendingMoviesDetails.push(json);
console.log(trendingMoviesDetails, trendingMoviesDetails[0])
}