web-dev-qa-db-fra.com

Erreur "Non capturé (promis) non défini" lors de l'utilisation de = emplacement dans la requête de l'API Graph Facebook

Je développe actuellement une application Web avec l'API Graph Facebook.

Mon objectif actuel est de récupérer uniquement les messages auxquels un emplacement est associé.

Bien que la récupération de messages avec et sans emplacement fonctionne déjà, je ne suis pas en mesure de récupérer uniquement les messages avec emplacement.

La requête qui récupère les deux types ressemble à ceci: '/me/feed?fields=id,name,message,picture,place,with_tags&limit=100&with=location'

La requête qui doit extraire uniquement les publications dont l'emplacement est semblable à ceci: /me/feed?fields=id,name,message,picture,place,with_tags&limit=100&with=location

Le problème que j'ai, c'est qu'avec le paramètre &with=location j'obtiens une erreur Uncaught (in promise) undefined à cette partie de mon code:

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

Le journal montre ce qui suit:

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

Quelqu'un at-il une solution possible pour cela?

Pour plus d'informations sur l'apparence du code, voir mon question précédente .

29
Michael Andorfer

L'erreur vous indique qu'il y a une erreur mais vous ne l'attrapez pas. Voici comment vous pouvez l'attraper:

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

Vous pouvez aussi simplement mettre un console.log(reponse) au début de votre fonction de rappel d'API, il y a certainement un message d'erreur de l'API Graph dedans.

Plus d'informations: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

Ou avec async/wait:

//some async function
try {
    let response = await getAllPosts();
} catch(e) {
    console.log(e);
}
57
luschn

La reject prend en fait un paramètre: c'est l'exception qui s'est produite dans votre code et qui a entraîné le rejet de la promesse. Ainsi, lorsque vous appelez reject(), la valeur de l'exception est undefined, d'où la partie "non définie" dans l'erreur que vous obtenez.

Vous ne montrez pas le code qui utilise la promesse, mais je pense que cela ressemble à ceci:

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

Essayez d'ajouter un appel d'échec vide, comme ceci:

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

Cela empêchera l’erreur d’apparaître.

Cependant, je n’envisagerais d’appeler reject qu’en cas d’erreur réelle, et aussi… avoir des gestionnaires d’exceptions vides n’est pas la meilleure pratique de programmation.

7
Wojtek Trelak