2017-03-27 68 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是原因。

相關問題