在 Facebook Graph API 查询中使用 with = location 时出现“未捕获(在承诺中)未定义”错误

我目前正在开发一个网络应用程序与 Facebook 图形应用程序接口。

我目前的目标是检索只有一个位置附加的职位。

虽然检索帖子有和没有位置已经工作,我不能检索只有位置的帖子。

检索这两种类型的查询如下所示: '/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

有人能解决这个问题吗?

有关代码的详细信息,请参阅我的 上一个问题

337456 次浏览

这个错误告诉你有一个错误,但是你没有抓住它。你可以这样抓住它:

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

或者使用异步/等待:

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

reject实际上接受一个参数: 这是在代码中发生的导致承诺被拒绝的异常。因此,当您调用 reject()时,异常值是 undefined,因此您得到的错误中有“未定义”部分。

您没有显示使用承诺的代码,但我认为它类似于下面这样:

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

尝试添加一个空的失败调用,如下所示:

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

这将防止出现错误。

但是,我会考虑只在出现实际错误的情况下调用 reject,而且... ... 拥有空的异常处理程序并不是最佳编程实践。