2016-07-10 11 views
0

Ich bekomme immer einen undefinierten Fehler in der CheckB-Funktion unten.Eigenschaft .undefinierter Fehler

export function checkB(accountId) { 
    return new Promise((resolve, reject) => { 
     const myRepo = new myRepo(); 
     myRepo.checkC(accountId).then(results => { 
     return resolve(results)); 
     }); 
    }); 
} 

Ich bin in der Lage, checkC aufrufen und eine JSON-Antwort zurück.

checkC(){ 
    const fetchApi = new FetchApi(); 
    const url = `${config.routes.base}/mypath/5`; 
    fetchApi.get(url).then(results => { 
    return results.json().then(json => { 
     return json; 
    }); 
    }).catch(err => { 
    console.log(err); 
    }); 
} 

Ich habe eine eine erste fucntion Checka(), die CheckB nennt - ich versuche, die Ergebnisse in Checka synchron zu bekommen, aber in den .then undefiniert Fehler von CheckB am Laufen zu halten.

Kann mir jemand erklären, was ich hier falsch mache.

+2

'checkC' nichts zurückliefert ... – elclanrs

Antwort

4

Sie müssen zurückkehren ein Promise von checkC():

checkC(){ 
    const fetchApi = new FetchApi(); 
    const url = `${config.routes.base}/mypath/5`; 
    return fetchApi.get(url) 
    .then(results => results.json()); 
    .catch(console.log); 
} 

Da auch results.json() ein Versprechen ist, das gibt Ergebnisse, Sie nicht die .then(json => {return json;}); Sache tun müssen.

Und im Allgemeinen, wenn Sie etwas mit dem Ergebnis eines Versprechens tun müssen, das selbst das Ergebnis eines anderen Versprechens ist, können Sie sie verketten, ohne geschachtelten Code zu benötigen.

Sie können Ihr zweites Beispiel wie das schreiben (es nutzlos, erste Code schrieb ich funktioniert gut, nur um ein Beispiel):

const fetchApi = new FetchApi(); 
const url = `${config.routes.base}/mypath/5`; 
fetchApi.get(url).then(results => { 
    return results.json(); 
}) 
.then(json => { 
    return json; 
}).catch(err => { 
    console.log(err); 
});