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

所以我一直在开发一个 react native 应用程序,就像 meetups 应用程序一样。 它有自己的 node.js 后端,可以在这里查看 https://github.com/rahullakhaney/meetup/tree/master/meetup-backend 在我的应用程序中,我试图从我的数据库中填充组,我收到此错误“可能未处理的承诺拒绝 (id:0) null 不是对象”

这是我的 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查看完整代码

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

【问题讨论】:

    标签: node.js mongodb react-native expo


    【解决方案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);
    }
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-20
      • 2018-03-11
      • 2018-07-14
      • 2017-10-09
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      相关资源
      最近更新 更多