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这是一个可怕的问题,我甚至不知道我有。非常感谢!