从 Facebook Messenger 中检索 first_name 会导致 [object Promise]

Retrieving first_name from Facebook Messenger results in [object Promise]

我正在向 return 我的 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);
  }
}

我在关注这个 post here

问题是它只有 returns [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 调用,因为我的语法在原来的 post
  • 中是错误的
  • 我添加了 .then 语句以确保函数的每个步骤都已完成,然后再继续下一步以解决我遇到的一些 [object Promise] 问题
  • 我使用 stringify 将 JSON 对象转换为字符串
  • 我使用 slice 函数去掉了为 first_name 返回的字符串的第一个和最后一个字符,因为它们是引号(“first_name”)