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

Node.js 可能的未处理承诺拒绝(id:0)null不是对象,node.js,mongodb,react-native,expo,Node.js,Mongodb,React Native,Expo,所以我一直在开发一个react原生应用程序,就像meetups应用程序一样。 它有自己的node.js后端,可在此处查看 在我的应用程序中,我试图从数据库中填充组时,出现以下错误:“可能的未处理承诺拒绝(id:0)null不是对象” 这是我的api.js文件 import axios from 'axios'; axios.defaults.baseURL = 'http://localhost:3000/api'; const fakeGroupId = '58d64e3a122149dd

所以我一直在开发一个react原生应用程序,就像meetups应用程序一样。 它有自己的node.js后端,可在此处查看 在我的应用程序中,我试图从数据库中填充组时,出现以下错误:“可能的未处理承诺拒绝(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
};
您还可以在以下位置查看完整的代码:


任何人都可以解释为什么我会出现这个错误,很抱歉,我对react native是新手。

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

当你写这篇文章时:

const { data } = await axios.get(this.path);
然后真正发生的事情是,您将resolve回调添加到由
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:未经处理的拒绝以前是警告,但现在会使你的应用程序崩溃。这就是原因