web-dev-qa-db-ja.com

Facebook Graph APIクエリでwith = locationを使用すると「Uncaught(in promise)undefined」エラーが発生する

現在、Facebook Graph APIを使用してWebアプリケーションを開発しています。

私の現在の目標は、場所が添付されている投稿のみを取得することです。

ロケーションのある投稿とない投稿の取得は既に機能していますが、ロケーションのある投稿のみを取得することはできません。

両方のタイプを取得するクエリは次のようになります。'/me/feed?fields=id,name,message,picture,place,with_tags&limit=100&with=location'

場所のある投稿のみを取得するクエリは次のようになります:/me/feed?fields=id,name,message,picture,place,with_tags&limit=100&with=location

私が抱えている問題は、パラメータ&with=locationを使用すると、コードのこの部分でエラーUncaught (in promise) undefinedが発生することです。

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

ログには以下が表示されます。

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

誰にもこれに対する解決策がありますか?

コードの詳細については、私の 前の質問 をご覧ください。

29

エラーはエラーがあることを伝えますが、あなたはそれをキャッチしません。これはあなたがそれをキャッチする方法です:

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

APIコールバック関数の先頭にconsole.log(reponse)を追加することもできます。その中にはGraph APIからのエラーメッセージが間違いなくあります。

詳細: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

または、async/awaitを使用:

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

rejectは実際には1つのパラメーターを取ります。それは、Promiseが拒否される原因となったコードで発生した例外です。したがって、reject()を呼び出すと、例外値はundefinedになります。したがって、エラーの「未定義」の部分になります。

Promiseを使用するコードは表示されませんが、次のようなものだと思います。

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

次のように、空の失敗呼び出しを追加してみてください。

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

これにより、エラーが表示されなくなります。

ただし、rejectの呼び出しは実際のエラーの場合にのみ検討し、空の例外ハンドラーを使用することはプログラミングのベストプラクティスではありません。

7
Wojtek Trelak