0

所以我一直在开发一个 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查看完整代码

任何人都可以解释为什么我会收到这个错误,对不起,但我是新来的反应原生。

4

1 回答 1

0

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:未处理的拒绝曾经是警告,但现在会使您的应用程序崩溃。就是为什么。

于 2017-03-27T12:29:19.797 回答