Javascript TypeError:data.json不是函数

Javascript TypeError:data.json不是函数,javascript,json,reactjs,es6-promise,Javascript,Json,Reactjs,Es6 Promise,我试图编写一些代码,获取API响应,使用该数据插入新的API调用,获取响应并执行一些逻辑,以正确的顺序将其返回给用户 makeRequest = async () => { let realPhotoData = []; let actualPhotoData = []; let actualCityData = []; const place = this.state.inputValue; const url = url; //

我试图编写一些代码,获取API响应,使用该数据插入新的API调用,获取响应并执行一些逻辑,以正确的顺序将其返回给用户

  makeRequest = async () => {
    let realPhotoData = [];
    let actualPhotoData = [];
    let actualCityData = [];

    const place = this.state.inputValue;
    const url = url;

    // first fetch call returning 8 venues for location searched (picture data not included in response)
    fetch(url)
      .then(response => {
        return response.json();
      })
      .then(data => {
        let allCities = data.response.groups[0].items;

        for (let key of allCities) {
          let searchData = {
            title: key.venue.name,
            city: key.venue.location.city,

            country: key.venue.location.country,
            photoId: key.venue.id
          };

          let venueIdArray = {
            photoId: key.venue.id
          };
          actualCityData.push(searchData);
          actualPhotoData.push(venueIdArray);
        } /* end of for loop, placed response data in 2 arrays, need venueIdArray for 2nd fetch call (loop of 8 fetch calls) */

        // for loop for second fetch call(8 of them) it returns photos for 8 venues

        for (let i = 0; i < actualPhotoData.length; i++) {
          var venueId = actualPhotoData[i].photoId;
          let photoUrl = photoUrl;


          let callPhotoSearch = async (actualCityData) => {
            if (actualCityData) {
              const photoRequest = fetch(photoUrl)
              .catch(err => {
                return { error: err };
                })

              await Promise.all([photoRequest]).then(data => {
                  const photoData = data.json();
                // })
                // .then(data => {
                  realPhotoData.push({
                    returnPhotoId: photoData.meta.requestId,
                    returnVenueId: i,
                    prefix: photoData.response.photos.items[0].prefix,
                    size: "300x500",
                    suffix: photoData.response.photos.items[0].suffix
                  });
                  console.log(realPhotoData)

                  realPhotoData.sort(
                    (a, b) => a.returnVenueId - b.returnVenueId
                  );

                  var photoAndSearchData = [];

                  for (let j = 0; j < actualCityData.length; j++) {
                    // console.log(realPhotoData, actualCityData);
                    photoAndSearchData.push({
                      key1: actualCityData[j],
                      key2: realPhotoData[j]
                    });
                    console.log(photoAndSearchData);

                    this.setState({
                      cardArray: photoAndSearchData
                    });
                  }
                  console.log(this.state);
                });
            }
          };
         callPhotoSearch(actualCityData);
        }
      });
  }; 
makeRequest=async()=>{
让realPhotoData=[];
让实际光照数据=[];
让actualCityData=[];
const place=this.state.inputValue;
consturl=url;
//第一次获取呼叫返回8个场地以搜索位置(响应中不包括图片数据)
获取(url)
。然后(响应=>{
返回response.json();
})
。然后(数据=>{
让allCities=data.response.groups[0]。项目;
for(让所有城市的钥匙){
让searchData={
标题:key.vention.name,
城市:key.vention.location.city,
国家:key.vention.location.country,
照片id:key.vention.id
};
让Venueidaray={
照片id:key.vention.id
};
actualCityData.push(searchData);
实际光电数据推送(Venueidaray);
}/*for循环结束,将响应数据放在2个数组中,第二次提取调用需要VenueArray(8次提取调用的循环)*/
//对于第二次取回调用的循环(其中8个),它返回8个场地的照片
for(设i=0;i{
if(实际数据){
const photoRequest=fetch(photoUrl)
.catch(错误=>{
返回{error:err};
})
等待承诺。全部([photoRequest])。然后(数据=>{
const photoData=data.json();
// })
//。然后(数据=>{
realPhotoData.push({
returnPhotoId:photoData.meta.requestId,
维纽伊德:我,
前缀:photoData.response.photos.items[0]。前缀,
尺寸:“300x500”,
后缀:photoData.response.photos.items[0]。后缀
});
console.log(realPhotoData)
realPhotoData.sort(
(a,b)=>a.returnVenueId-b.returnVenueId
);
var photoAndSearchData=[];
for(设j=0;j

不幸的是,我一直收到
未处理的拒绝(TypeError):data.json不是一个函数
,当我需要json格式的数据时,我不确定如何解决这个问题

通常在api响应中,json将被字符串化。尝试使用

JSON.parse(数据)


如果您发布您的响应对象,它将非常有用

响应对象是一组场地:

(4) […]
​
0: Object { title: "Rotunda of the U.S. Capitol", city: "Washington", country: "United States", … }
​
1: Object { title: "Washington Monument", city: "Washington", country: "United States", … }
​
2: Object { title: "Meridian Hill Park", city: "Washington", country: "United States", … }
​
3: Object { title: "Library Of Congress Main Reading Room", city: "Washington", country: "United States", … }
​
length: 4

从那次通话中得到的数据是什么?从邮递员或其他人那里得到一个完全相同的电话,然后粘贴回复,会很有帮助。