2016-06-03 48 views
9

Attualmente sto sviluppando un'applicazione Web con l'API di Facebook Graph.Errore "Uncaught (in promise) undefined" quando si utilizza con = posizione nella query dell'API di Facebook Graph

Il mio obiettivo attuale è recuperare solo i post che hanno una posizione collegata.

Mentre il recupero dei post con e senza posizione è già funzionante, non sono in grado di recuperare solo i post con posizione.

La query che recupera entrambi i tipi si presenta così: '/me/feed?fields=id,name,message,picture,place,with_tags&limit=100&with=location'

La query che dovrebbe recuperare solo i messaggi con una posizione simile a questo: /me/feed?fields=id,name,message,picture,place,with_tags&limit=100&with=location

Il problema che ho è che con il parametro &with=location ottengo un errore di Uncaught (in promise) undefined in questa parte del mio codice:

if (response.paging && response.paging.next) { 
    recursiveAPICall(response.paging.next); 
    } else { 
    resolve(postsArr); 
    } 
} else { 
    // Error message comes from here 
    reject(); 
} 

registro mostra il seguente:

DEBUG: ------------------------------- 
DEBUG: Ember    : 2.4.5 
DEBUG: Ember Data  : 2.5.3 
DEBUG: jQuery   : 2.2.4 
DEBUG: Ember Simple Auth : 1.1.0 
DEBUG: ------------------------------- 
Object {error: Object} 
    error: Objectcode: 
    code: 1 
    1fbtrace_id: "H5cXMe7TJIn" 
    message: "An unknown error has occurred." 
    type: "OAuthException" 
    __proto__: Object 
    __proto__: Object 
Uncaught (in promise) undefined 

Qualcuno ha una possibile soluzione per questo?

Per ulteriori informazioni sull'aspetto del codice, vedere il mio previous question.

+0

dove esattamente nel codice si verifica l'errore? hai eseguito il debug di quella parte? dovresti aggiungere la parte specifica alla tua domanda qui. includi sempre abbastanza informazioni nella tua domanda in modo che altre persone non debbano testare il tuo codice. – luschn

+0

@luschn Ho aggiunto la parte del codice e il registro. – mian

+1

metti un console.log (risposta) prima di quella parte di codice e guarda cosa ottieni. il codice è molto chiaro, non si rileva un errore nel codice corrente. molto probabilmente va al percorso di rifiuto. – luschn

risposta

27

L'errore indica che c'è un errore ma non lo si cattura. In questo modo si può prendere:

getAllPosts().then(response => { 
    console.log(response); 
}).catch(e => { 
    console.log(e); 
}); 

Si può anche solo mettere un console.log(reponse) all'inizio della funzione API di callback, c'è sicuramente un messaggio di errore dal Graph API in esso.

Maggiori informazioni: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

+0

Infine, ho eseguito la ricorsione con la proprietà precedente anziché la proprietà successiva che ha corretto l'errore. – mian

5

Il reject prende effettivamente un parametro: questo è l'eccezione che si è verificato nel codice che ha causato la promessa di essere respinta. Quindi, quando chiami reject() il valore di eccezione è undefined, quindi la parte "non definita" nell'errore che ottieni.

non si mostra il codice che utilizza la promessa, ma mi sa che è qualcosa di simile:

var promise = doSth(); 
promise.then(function() { doSthHere(); }); 

Prova ad aggiungere una chiamata in fallimento vuoto, in questo modo:

promise.then(function() { doSthHere(); }, function() {}); 

Questa volontà prevenire l'errore di apparire.

Tuttavia, vorrei prendere in considerazione la chiamata di reject solo in caso di un errore effettivo, e anche ... avere gestori di eccezioni vuoti non è la migliore pratica di programmazione.

+0

Oh, grazie per la chiamata "considera la possibilità di rifiutare solo nel caso ..." –