javascript - 如何在 firebase 中使用承诺?

2024-01-09

最近我被一个问题困扰,不知道如何解决。我问this https://stackoverflow.com/questions/47775150/javascript-then-executing-before-the-loop-completes-in-firebase/47775453问题,经过一番努力,我们发现 Firebase 的 Promise 工作方式与正常请求不同,而且我无法正确使用它们。
正如中所解释的问题 https://stackoverflow.com/questions/47775150/javascript-then-executing-before-the-loop-completes-in-firebase/47775453,我正在用 Firebase 中的一些信息填充一个数组,当我确定数组已填充时,换句话说,当我确定对 Firebase 的调用已完成时,我需要调用另一个方法。 这是我现在使用的代码:

var user_pref = firebase.database().ref('/users/'+ self.api.email_id+'/preferenze/');
      var ref = firebase.database().ref('/tag/')
var userTags = [];
var self1 = self;
user_pref.once('value', function(preferenze) { 
  preferenze.forEach(function(t) {
    ref.once('value', function(tags) { 
      tags.forEach(function(t1) {
        if (t.key == t1.key) { 
          console.log("Found " + t1.key)
          userTags.push(t1.key)
        }
        return false;
      });
    })
    return false;
  });
}).then(a =>{
  await this.sleep(1000) //----> WORKAROUND
  console.log("Out")
  this.myTags = userTags
  this.findPoiByTag(this.myTags) //method I have to call when finished
})

我正在使用这种可怕的解决方法与睡眠,以确保外部代码在内部代码之后执行。如果没有它,它会先打印“Out”,然后打印循环中的所有“Found”。我已经尝试以各种方式使用它与承诺,但它仍然不起作用。看看文档在这里 https://firebase.google.com/docs/functions/terminate-functions?hl=en我找不到任何可以帮助我的东西。


这确实很糟糕。

这应该更接近您所需要的:

var userTags = [];
var self1 = self;
user_pref.once('value', function(preferenze) { 
  var promises = [];
  preferenze.forEach(function(t) {
    promises.push(ref.child(t.key).once('value'));
  });
  Promise.all(promises).then(function(snapshots) {
    snapshots.forEach(function(snapshot) {
      if (snapshot.exists()) {
        userTags.push(snapshot.key);
      }
    });
  })
  this.myTags = userTags
  this.findPoiByTag(this.myTags) //method I have to call when finished
});

这有什么不同之处:

  1. 它通过直接查看加载每个首选项键(消除了加载过多数据的深层嵌套循环的需要)。
  2. 它将所有类别的负载放入一系列承诺中。
  3. 然后,它会在所有承诺都解决后调用您的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript - 如何在 firebase 中使用承诺? 的相关文章

  • 渲染货币和符号并与来自不同单元格的数据相结合

    我正在使用最新的 jQuery DataTables v1 10 7 我正在尝试将数字解析为以下格式 239 90 USD 我可以使用此命令使货币正常工作 columns data Price render fn dataTable ren
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points

随机推荐

  • 缩放后为不同标签设置相同的字体大小

    我正在制作一个有 3 个标签的应用程序 我正在使用标签自动收缩来帮助调整标签的字体大小以适应设备 这些标签彼此相邻 因此这意味着我希望它们具有相同的字体大小 目前发生的情况是 因为它们有不同数量的文本 它们最终会缩小到不同的字体大小 有没有
  • 混淆 JavaFX 应用程序

    由于 fxml files 使用控制器类来处理事件 那么如何混淆 JavaFX 应用程序呢 当混淆的控制器类具有不同的名称和路径时 fxml 文件无法找到它们 混淆后编辑 fxml 文件不是我正在寻找的解决方案 还有其他选择吗 没有必要重新
  • OkHttp SSLHandshakeException SSL 握手中止 SSL 库中出现故障,协议错误

    04 23 17 17 38 434 21599 21956 D NativeCrypto ssl 0x0 NativeCrypto SSL interrupt 04 23 17 17 38 435 21599 21956 D OkHttp
  • 夏令时和 Cron

    如果 Cron 有一项工作安排在凌晨 2 点运行 另一项工作在凌晨 3 点运行 这些工作将如何受到夏令时的影响 当时间向后移动一小时时 时间是否会直接从凌晨 2 59 59 变为凌晨 2 00 00 这意味着凌晨 2 点的作业将运行两次 凌
  • 运行时设置 TextView 在 RemoteView 中的位置

    亲爱的大家 我正在尝试在应用程序小部件中设置 TextView 的位置 基本上 直接访问 TextView 的属性是有效的 myRemoteView setTextColor R id myTextView Color WHITE work
  • 检测鼠标被按住

    我试图检测何时按住鼠标而不是单击鼠标 这就是我所拥有的 但我希望能够检测到鼠标被按住 而不是点击计数 void mouseDown NSEvent event instead of clickCount I want my if state
  • 为什么 `'↊'.isnumeric()` 为 false?

    根据官方 Unicode 联盟代码表 http www unicode org charts PDF U2150 pdf 所有这些都是数字 然而 当我要求 Python 告诉我哪些是数字时 它们都是数字 甚至 除了四个 In 252
  • Postgres 中从多行到单列

    我通过 pgAdmin 4 使用具有只读访问权限的 Postgres 9 5 并且尝试编写一个选择查询来转换来自此表单的数据 username filters groups roles kd24 Khaled lt 27607 gt V1
  • 如何使用 SIMD 比较两个向量并获得单个布尔结果?

    我有两个分别包含 4 个整数的向量 我想使用 SIMD 命令来比较它们 假设根据比较结果生成一个结果向量 其中每个条目为 0 或 1 然后 我想将结果向量与 4 个零的向量进行比较 只有当它们相等时才执行某些操作 你知道我可以使用哪些 SI
  • 如何根据对象的属性比较两个 NSSet?

    我有两个 nsset nsset1 person id 1 person id 2 person id 3 nsset2 person id 1 person id 2 结果应该是 nsset1 nsset2 person with id
  • 在自己的 php 框架中管理 URL 路由

    我正在创建一个 PHP 框架 但我有一些疑问 框架以这种方式获取 url http web com site index 它采用第一个参数来加载控制器 site 然后加载特定的动作 index 如果您已将框架安装在基本 URL 中 则可以正
  • 如何在 Cypress.io 中强制测试失败

    在 Cypress io 中 如果满足特定条件 有没有一种方法可以强制测试失败 例如 在我的网页上 如果字符串 抱歉 出了点问题 出现在我希望测试失败的页面上 目前这就是我正在做的事情
  • 有什么方法可以知道哪个集合视图单元格位于特定点?

    我有一个 CGPoint 我想知道我的集合视图中的哪个单元格当前包含该点 有什么简单的方法可以做到这一点还是我必须编写自己的方法 我没用过UICollectionView就这么多 但有一个看起来很完美的方法 NSIndexPath inde
  • 在 Visual Studio 项目模板中添加引用?

    我正在为 VS2015 创建一个多项目模板 其中创建的项目之一引用另一个项目 如何使用模板添加参考 如果我使用 VS GUI 添加引用 它会将以下内容添加到 vcxproj 文件中
  • 理解 Node.js 中的 Promise 拒绝

    我正在尝试理解 Node js 中的 Promise 这是示例代码 con queryReturnPromise SELECT FROM bookings WHERE driverId accId AND bookingStatus con
  • dart / flutter 使用 sudo 运行进程

    我想为 mac 桌面开发一个 flutter 应用程序并使用以下命令访问 macs powermetricssudo powermetrics有没有办法在第一次运行时向用户询问此命令的 sudo 权限 嗨 我只是在玩颤振 我正在解决同样的问
  • 快捷栏操作文本颜色未改变

    我想更改小吃栏的操作文本颜色 但由于某种原因它不起作用 我使用以下代码来显示小吃栏 Snackbar make findViewById R id root text Snackbar LENGTH LONG setActionTextCo
  • knex:从结果创建数组的适当方法是什么?

    我有一个端点连接user and user emails表作为一对多关系 postgresql 它看起来如下 router get function req res next db select users id users name us
  • 以编程方式将元素拖放到另一个元素上

    使用 jQuery UI 是否可以使用 JavaScript 执行拖放操作 Example http jsfiddle net KFRu9 单击链接后 将 pony并将其放入 box 我尝试过触发拖动事件 但这似乎不起作用 pony tri
  • javascript - 如何在 firebase 中使用承诺?

    最近我被一个问题困扰 不知道如何解决 我问this https stackoverflow com questions 47775150 javascript then executing before the loop completes