Javascript 承诺。所有返回的空对象
我正在尝试使用Javascript 承诺。所有返回的空对象,javascript,Javascript,我正在尝试使用Promise.all一次从电影数据库获取多个数据对象。在我循环遍历fetch调用的所有结果,并对每个数据位使用.json()之后,我尝试将其记录到控制台。然而,我得到的不是一个包含数据的对象数组,而是一个承诺的数组。嵌套在Promissions中,我可以看到我的数据,但我显然错过了一个步骤,以获得一个数据对象数组,而不仅仅是Promissions 我错过了什么 //store movie API URLs into meaningful variables const
Promise.all
一次从电影数据库获取多个数据对象。在我循环遍历fetch
调用的所有结果,并对每个数据位使用.json()
之后,我尝试将其记录到控制台。然而,我得到的不是一个包含数据的对象数组,而是一个承诺的数组。嵌套在Promissions中,我可以看到我的数据,但我显然错过了一个步骤,以获得一个数据对象数组,而不仅仅是Promissions
我错过了什么
//store movie API URLs into meaningful variables
const trending = `https://api.themoviedb.org/3/trending/all/day?api_key=${API_KEY}`;
const topRated = `https://api.themoviedb.org/3/movie/top_rated?api_key=${API_KEY}&language=en-US&page=1`;
const nowPlaying = `https://api.themoviedb.org/3/movie/now_playing?api_key=${API_KEY}&language=en-US&page=1`;
const upcoming = `https://api.themoviedb.org/3/movie/upcoming?api_key=${API_KEY}&language=en-US&page=1`;
//create an array of urls to fetch data from
const allMovieURLs = [trending, topRated, nowPlaying, upcoming];
const promiseURLs = allMovieURLs.map(url => fetch(url));
Promise.all(promiseURLs)
.then(responses => responses.map(url => url.json()))
.then(dataArr => console.log(dataArr));
};
您的.then(responses=>responses.map(url=>url.json())
解析为一个承诺数组,因此您需要再次调用Promise.all
以等待all解析:
Promise.all(promiseURLs)
.then(responses => Promise.all(responses.map(url => url.json())))
.then(dataArr => console.log(dataArr));
或者,您可以考虑只使用一个“代码>承诺”。所有的< /代码>,并具有每个URL <代码>取走< /COD>和<代码> JSON<代码>,这样一些脚本在脚本执行的中间不空闲:
const allMovieURLs = [trending, topRated, nowPlaying, upcoming];
const promiseURLs = allMovieURLs.map(url => fetch(url).then(res => res.json()));
Promise.all(promiseURLs)
.then(dataArr => console.log(dataArr));
试着这样做
const promiseURLs = allMovieURLs.map(url => fetch(url).then(res => res.json()));
Promise.all(promiseURLs)
.then(responses => responses.forEach(response => { console.log(response)})
我没有意识到Body.json也返回了一个承诺
!你的解释简单明了,这就解决了我的问题。谢谢。可能值得指出缺失的。好的
检查(我现在在对问题的评论中这样做了)。这不是问题所在,但该代码会犯两个常见错误,可能会在某个时候击中您。1.您没有检查请求是否成功。这是一个如此常见的错误(在我看来,是fetch
API中的一个错误),以至于我在我贫血的小博客上看到了它。检查响应上的.ok
。2.你不会拒绝你的承诺。所有的承诺,也不会把它传递给能处理它的人。你要么处理它,要么把承诺传递给会发生的事情。密切相关:@T.J.Crowder这是一个可怕的问题,我甚至不知道我有。非常感谢!