Javascript 带有fetch的函数返回未定义的数组(React Native)
我有一个包含一些函数的文件:Javascript 带有fetch的函数返回未定义的数组(React Native),javascript,reactjs,react-native,asynchronous,fetch,Javascript,Reactjs,React Native,Asynchronous,Fetch,我有一个包含一些函数的文件: const API = { async getComments() { var data = []; var url = 'http://url.com/wp-json/wp/v2/comments'; const serviceResponse = await fetch( url, ) .then((serviceResponse) => { return serviceResponse.json();
const API = {
async getComments() {
var data = [];
var url = 'http://url.com/wp-json/wp/v2/comments';
const serviceResponse = await fetch(
url,
)
.then((serviceResponse) => {
return serviceResponse.json();
} )
.catch((error) => console.warn("fetch error:", error))
.then((serviceResponse) => {
for (i in serviceResponse) {
data.push({
"key": serviceResponse[i]['id'].toString(),
"name": serviceResponse[i]['author_name'],
"content": serviceResponse[i]['content']['rendered'].replace(/<(.|\n)*?>/g, ''),
"gravatar": serviceResponse[i]['author_avatar_urls']['96'],
"date": serviceResponse[i]['date'].replace('T', ' ')
});
}
global.comments = data;
return data;
});
}
}
export { API as default }
但我收到未定义的消息,我尝试使用bind创建一个函数:
this.newGetComments=API.getComments.bind(this);同样的结果。我使用了一个全局变量,但我想删除全局变量。异步函数总是返回一个承诺,因为您不从getComments方法返回任何内容,该函数会自动解析并返回未定义(promise.resolve(undefined))。您需要从getComments方法返回serviceResponse以获取获取api的响应。
/*建议不多;
1.您没有从getComments方法返回任何内容。请返回获取(url)响应。
2.您应该从catch块返回一些内容来处理错误。
*/
常量API={
异步getComments(){
var url='1〕http://url.com/wp-json/wp/v2/comments';
var response=等待获取(url)
。然后(serviceResponse=>{
返回serviceResponse.json();
})
。然后(serviceResponse=>{
让数据=[];
//代码的其余部分。
返回{success:true,data};
})
.catch(错误=>{
console.warn('fetch error:',error);
返回{success:false,error};
});
返回响应
},
};
var comments=await API.getComments(键);
如果(注释.成功){
//处理成功案例comments.data
}否则{
//处理错误案例注释。错误
}
控制台日志(注释)代码>您可以尝试以下方法:
async componentDidMount() {
let data = [];
const result = await this.getComments();
const jsonData = await result.json();
console.log('Result ==> ', jsonData.serviceResponse);
jsonData.serviceResponse.map(data =>
data.push({
"key": data['id'].toString(),
"name": data[i]['author_name'],
"content": data[i]['content']['rendered'].replace(/<(.|\n)*?>/g, ''),
"gravatar": data[i]['author_avatar_urls']['96'],
"date": data[i]['date'].replace('T', ' ')
})
);
console.log('Data ==> ', data);
}
async getComments() {
const result = await fetch('http://url.com/wp-json/wp/v2/comments', {method: 'GET'});
return result;
}
异步组件didmount(){
让数据=[];
const result=wait this.getComments();
const jsonData=await result.json();
log('Result==>',jsonData.serviceress);
jsonData.serviceResponse.map(数据=>
数据推送({
“key”:数据['id'].toString(),
“姓名”:数据[i][“作者姓名”],
“内容”:数据[i]['content']['rendered'].replace(//g',),
“gravatar”:数据[i]['author\u avatar\u url']['96'],
“日期”:数据[i][date']。替换('T','')
})
);
log('Data==>',Data);
}
异步getComments(){
const result=等待取数('http://url.com/wp-json/wp/v2/comments“,{method:'GET'});
返回结果;
}
Hi@Enrique,您收到的内容未定义<代码>全局变量?或者getComments()
?您忘记在getComments
中返回数据。请尝试在getComments
的末尾返回servicerense
谢谢,我的返回信息排错了行,对不起,我没有看到详细信息。对不起,是的,返回信息排错了行,谢谢。我将在错误情况下添加一个响应
async componentDidMount() {
let data = [];
const result = await this.getComments();
const jsonData = await result.json();
console.log('Result ==> ', jsonData.serviceResponse);
jsonData.serviceResponse.map(data =>
data.push({
"key": data['id'].toString(),
"name": data[i]['author_name'],
"content": data[i]['content']['rendered'].replace(/<(.|\n)*?>/g, ''),
"gravatar": data[i]['author_avatar_urls']['96'],
"date": data[i]['date'].replace('T', ' ')
})
);
console.log('Data ==> ', data);
}
async getComments() {
const result = await fetch('http://url.com/wp-json/wp/v2/comments', {method: 'GET'});
return result;
}