2017-03-27 44 views
0

所以我一直在努力处理一个反应原生应用程序,就像聚会应用程序一样。 它有它自己的node.js后端,可以在这里查看 https://github.com/rahullakhaney/meetup/tree/master/meetup-backend 虽然在我的应用程序,我想从我的数据库填充组,我得到这个错误“可能未处理的承诺拒绝(id:0)null不是对象”可能未处理的承诺拒绝(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

任何人都可以请解释为什么我收到此错误,抱歉,但我新回应本地。

回答

0

async关键字声明的每个函数或方法均返回一个承诺。当你从该函数返回一些东西时,这个承诺就被解决了,当你在该函数中抛出一个异常时它就被拒绝了。

当你这样写:

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是原因。

相关问题