Javascript TypeError:data.json不是函数
我试图编写一些代码,获取API响应,使用该数据插入新的API调用,获取响应并执行一些逻辑,以正确的顺序将其返回给用户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; //
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
从那次通话中得到的数据是什么?从邮递员或其他人那里得到一个完全相同的电话,然后粘贴回复,会很有帮助。