可能未处理的承诺拒绝 (id:0) null 不是对象

Posted

技术标签:

【中文标题】可能未处理的承诺拒绝 (id:0) null 不是对象【英文标题】:Possible unhandled promise rejection (id:0) null is not an object 【发布时间】:2017-08-20 03:25:13 【问题描述】:

所以我一直在开发一个 react native 应用程序,就像 meetups 应用程序一样。 它有自己的 node.js 后端,可以在这里查看 https://github.com/rahullakhaney/meetup/tree/master/meetup-backend 在我的应用程序中,我试图从我的数据库中填充组,我收到此错误“”

这是我的 api.js 文件

import axios from 'axios';

axios.defaults.baseURL = 'http://localhost:3000/api';

const fakeGroupId = '58d64e3a122149dd3cdba5d8';

class MeetupApi 
  constructor() 
    this.groupId = fakeGroupId;
    this.path = `/groups/$this.groupId/meetups`;
  

  async fetchGroupMeetups() 
    const  data  = await axios.get(this.path);

    return data.meetups;
  



export 
  MeetupApi
;

您也可以在https://github.com/rahullakhaney/meetup/tree/master/meetup-mobile查看完整代码

谁能解释一下为什么我会收到这个错误,对不起,我是新来的反应原生的。

【问题讨论】:

【参考方案1】:

使用async 关键字声明的每个函数或方法都会返回一个promise。当您从该函数返回某些内容时,该承诺将得到解决,而当您在该函数中引发异常时,该承诺将被拒绝。

当你写这个时:

const  data  = await axios.get(this.path);

那么真正发生的事情是,您向axios.get() 返回的承诺添加了一个解析回调,但axios.get() 返回的承诺的每次拒绝都会在fetchGroupMeetups() 方法内作为异常引发。您不使用 try/catch 以便异常传播并反过来转换为对 fetchGroupMeetups() 返回的承诺的拒绝 - 您可能不会处理。

要处理该拒绝,您需要将其用作以下内容:

x.fetchGroupMeetups(...).catch(err => console.log('Error:', err));

或者,在其他async函数内部:

try 
  x.fetchGroupMeetups(...);
 catch (err) 
  console.log('Error:', err);

但当然要做的不仅仅是打印错误。

要了解有关哪些是未处理的拒绝以及为什么要始终处理它们的更多详细信息,请参阅以下答案:

Should I refrain from handling Promise rejection asynchronously?

TL;DR:未处理的拒绝曾经是警告,但现在会使您的应用崩溃。 Here 就是原因。

【讨论】:

以上是关于可能未处理的承诺拒绝 (id:0) null 不是对象的主要内容,如果未能解决你的问题,请参考以下文章

*可能的未处理承诺拒绝(id:0):类型错误:未定义不是对象(评估'result.cancelled')云图像上传

可能的未处理承诺拒绝(id:0):TypeError:适配器不是函数。 (在“适配器(配置)”中,“适配器”未定义)?

反应本机中未处理的承诺拒绝错误?

如何解决该错误>> WARN可能的未处理承诺拒绝(id:0):

使用 useMutation 可能出现未处理的承诺拒绝警告

未处理的承诺拒绝:未定义不是对象(评估 _expoLocation.requestForegroundPermissionsAsync)