我正在编写一个简单的查询来返回我的 Facebook Messenger 聊天机器人用户的名字,如下所示:
async queryFB(id) {
const fb_page_access_token = dotenv.FACEBOOK_ACCESS_TOKEN
const response = await get("https://graph.facebook.com/v3.3/"+ id + "?fields=first_name&access_token=" + fb_page_access_token);
const json = await response.json();
return json.first_name
}
async fbFirstName() {
const fbUserID = session.user.id
try {
const firstName = await queryFB(fbUserID);
console.log(firstName);
} catch(e) {
console.log("Error: " + err);
}
}
我正在关注这篇文章 here
问题是它只返回 [object Promise]。我认为解决这个问题的方法是使用异步和等待,但我仍然遇到同样的问题。
最佳答案
经过大量修改代码后,我设法解决了这个问题,如下所示:
function fbFetch() {
const fb_page_access_token = process.env.FACEBOOK_ACCESS_TOKEN
var fbID = 716540089
fetch('https://graph.facebook.com/v3.3/' + fbID + '?fields=first_name&access_token=' + fb_page_access_token)
.then(function(response) {
return response.json();
})
.then(function(myJson) {
var fbName = JSON.stringify(myJson.first_name);
var fbNameTrim = fbName.slice(1,-1);
console.log(fbNameTrim);
turnContext.sendActivity("Hi " + fbNameTrim + "! From inside fbFetch() before return fbNameTrim");
return fbNameTrim;
})
catch(e) {
console.log("Error: " + err);
}
}
我做的修改如下:
- 我更新了 const fb_page_access_token 调用,因为它是我在原始帖子中的语法错误
- 我添加了 .then 语句以确保函数的每个步骤都已完成,然后再继续下一步以解决我遇到的一些 [object Promise] 问题
- 我使用 stringify 将 JSON 对象转换为字符串
- 我使用 slice 函数去掉了为 first_name 返回的字符串的第一个和最后一个字符,因为它们是引号(“first_name”)
关于javascript - 从 Facebook Messenger 中检索 first_name 会导致 [object Promise],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57082542/