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;
}