javascript - 全局变量未传递 - Javascript FCF

标签 javascript firebase google-cloud-functions

我正在使用 firebase 云函数,在其中定义变量 commentIdSpecific。当我将其记录在函数内时: -- console.log(comm id ${commentIdSpecific}); -- 它会打印其值。当我尝试在此处打印它时: -- console.log(test of variables inisde of post: ${usernameWhoOwnsThePost}, uwotpi: ${commentIdSpecific}) -- 它返回未定义。我看过三个谈论全局变量的网站,它似乎与我这里的没有任何不同。

如何让第二个打印语句中的值出现在第一个打印语句中?提前致谢。

var commentIdSpecific;
  db.ref(`/users/${usernameWhoOwnsThePost}/posts/${usernameWhoOwnsThePostID}/comments`).once('value').then(snap => {
      commentIdSpecific = snap.val();
      let ids = [];
         for (var id in snap.val()) {
           ids.push(id);
         }
  let lastValueId = ids[ids.length - 1]
  console.log(`last id value ${lastValueId}. UserPost: ${usernameWhoOwnsThePost}. user owner post id: ${usernameWhoOwnsThePostID}...`);
  commentIdSpecific = lastValueId;
  console.log(`comm id ${commentIdSpecific}`);
      return commentIdSpecific;
    }).catch(err => {
    console.log(err);
  });


  var commentPoster;
  db.ref(`/users/${usernameWhoOwnsThePost}/posts/${usernameWhoOwnsThePostID}/comments/${commentIdSpecific}/comment`).once('value').then(snap => {
      commentPoster = snap.val();
      console.log(`commentPoster: ${snap.val()}`);
      console.log(`test of variables inisde of post: ${usernameWhoOwnsThePost}, uwotpi: ${commentIdSpecific}`)
      return commentPoster
    }).catch(err => {
    console.log(err);
  });

最佳答案

once() 是异步的,并立即返回一个 promise ,指示异步工作何时完成。同样,then() 立即返回并带有一个 promise 。每当查询结果完成时,您传递给 then() 的回调就会在一段未知的时间后执行。在此之前,您的代码将继续在下一行执行,这意味着 commentIdSpecific 在首次访问时将是未定义的。

您需要使用 promise 链来确保依赖于异步工作结果的工作仅在可用后才能访问。

您可能想观看本页面上有关 JavaScript Promise 的视频,以便更好地了解它们在 Cloud Functions 中的使用方式。了解它们如何编写有效的代码绝对至关重要。

https://firebase.google.com/docs/functions/video-series/

关于javascript - 全局变量未传递 - Javascript FCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795795/

相关文章:

java - 从 Firebase 数据库中检索特定值到字符串变量

Firebase 缺少身份验证请求的初始状态

javascript - 在 firebase 中检索自定义身份验证的凭据以链接自定义提供程序

javascript - 如何解构云函数参数?

javascript - 按子值搜索 Cloud Firestore

javascript - 咕噜服务器 : command not found in terminal

php - 通过 Javascript 中的 xmlHttpRequest 将查询字符串值发送到另一个 php 页面时,查询字符串值被 chop 吗?

javascript - 为什么 'this' 关键字在以下 html 代码中不起作用?

javascript - Firestore 云功能 |基于时间字段的触发事件等于

javascript - <head> 标签上的 Angularjs 1.5 ng-controller