社区首页 >问答首页 >在执行下一个命令之前完成整个循环/ forEach

在执行下一个命令之前完成整个循环/ forEach
EN

Stack Overflow用户
提问于 2019-08-16 16:27:10
回答 1查看 59关注 0票数 1

我一直让它工作,直到我在forEach后面添加了更多的命令。基本上,当一个帖子被删除时,主要的目标是将它从用户的提要中删除(这是有效的)。然后我链接了4个.then(),现在它只循环一次,然后完成其余的进程……在继续之前,我如何确保它先循环整个集合?

下面是我的代码:

代码语言:javascript
代码运行次数:0
复制
    exports.updateFeedDelete = functions.database.ref('/categories/{postId}')
      .onDelete((snapshot, context) => {

      //...

      const followersRef = admin.database().ref(`friends/${friendId}`);

      return followersRef.once("value", function(snap) {
        snap.forEach(function(childSnapshot) {
          const followerId = childSnapshot.key;
          //FINISH ALL LOOPS HERE?
          return admin.database().ref(`feed/${followerId}/${postId}`).remove();
        });
      })
      //DONT EXECUTE UNTIL ALL LOOPS ARE DONE, NOT ONLY 1...
      .then(() => {
        //...
      })
      .then(() => {
        //...
      })
      .then(() => {
        //...
      })
      .then(() => {
        //...
    })

我很感谢大家对我的帮助,干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 17:15:49

如果您想知道一大堆并行操作何时完成,请使用数据库上的promise接口获取每个操作的promise,并使用Promise.all()监视promise数组并告诉您它们何时全部完成,然后在Promise.all()告诉您一切都已完成时启动代码的其余部分。

我真的不太了解firebase API,但在文档中稍微查看一下,我认为它可能是这样的:

代码语言:javascript
代码运行次数:0
复制
exports.updateFeedDelete = functions.database.ref('/categories/{postId}')
  .onDelete((snapshot, context) => {

  //...

  const followersRef = admin.database().ref(`friends/${friendId}`);

  return followersRef.once("value").then(snap => 
    let promises = [];
    snap.forEach(childSnapshot => {
      const followerId = childSnapshot.key;
      // do whatever else here.  If asynchronous, chain promises
      // so you're pushing one promise into the array that
      // represents when all this code is done
      promises.push(admin.database().ref(`feed/${followerId}/${postId}`).remove());
    });
    return Promise.all(promises);                                     
  }).then(() => {
    // code here will run after the snap.forEach() code is done
  }).catch(err => {
    // handle errors here
  });
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57528113

复制
相关文章
文档片段(createDocumentFragment)
1.createDocumentFragment var one = document.getElementById("one"); var k = document.createDocumentFragment(); var p = document.createElement("p"); p.innerHTML = "我们不一样"; k.appendChild(p); one.appendChild(k) console.log(k) //文档里没
天天_哥
2018/09/29
5220
[linux][c/c++]代码片段01
#include <stdio.h> #include <unistd.h> void usage() { printf("Usage:\n"); printf("\tOptDemo [-a] [-b] [-c message]"); } int main(int argc, char *argv[]) { int o; const char *optstring = "abc::"; // 有三个选项-abc,其中c选项后有两个冒号,表示后面可选参数 whi
landv
2019/11/10
6760
[linux][c/c++]代码片段02
 gcc `pkg-config --cflags gtk+-3.0` -o example-1 example-1.c `pkg-config --libs gtk+-3.0`
landv
2019/11/11
4970
[linux][c/c++]代码片段02
php代码片段
获取文件后缀
lilugirl
2019/05/26
4K0
Vue.js 中的片段
为了使诸如屏幕阅读器之类的辅助技术能够解释网页和应用程序,无障碍支持是必需的。为了使这些技术起作用,开发人员需要考虑可访问性。
疯狂的技术宅
2020/01/14
2.7K0
Vue.js 中的片段
实战:从 Redux 中的代码片段中应用柯里化!
本文通译自:JavaScript Currying: A Practical Example
掘金安东尼
2022/09/19
9840
MarkDown常用代码片段和工具
markdwon可以支持Html代码,所以很多原生markdown没有的功能,就可以用Html写了。
sean.liu
2022/08/03
3150
HTML代码片段
IE条件注释 <!--[ifIE6]> IE6版本有效 <![endif]--> <!--[if gt IE6]> IE6以上版本有效 <![endif]--> <!--[if gte IE6]> IE6(包含)及以上版本有效 <![endif]--> <!--[if lt IE8]> IE8以下版本有效 <![endif]--> <!--[if lte IE8]> IE8(包含)及以下版本有效 <![endif]--> <!--[if !IE]>--> 除了IE <![endif]--> 用Chrome或
前端GoGoGo
2018/08/27
5.3K0
VSCode 添加用户代码片段,自定义用户代码片段
在使用 VScode 开发中经常会有一些重复使用的代码块,复制粘贴也很麻烦,这时可以在 VScode 中添加用户代码片段,输入简写即可快捷输入。
Cell
2023/09/15
1K0
VSCode 添加用户代码片段,自定义用户代码片段
CSS代码片段
见 https://css-tricks.com/snippets/css/media-queries-for-standard-devices/
前端GoGoGo
2018/08/27
9080
Spring代码片段
配置springmvc核心控制器DispatcherServlet web.xml
小锋学长生活大爆炸
2020/11/24
6640
Spring代码片段
1049. 数列的片段和(20)
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这10个片段。
AI那点小事
2020/04/20
3290
1049. 数列的片段和(20)
【PAT乙级】数列的片段和
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
4020
nodejs常用代码片段
调用:node index.js --target test 接收:const config=loadConifg(['target'],'--') //config.target----->test
易墨
2018/09/14
8840
Shell脚本常用片段
shell脚本时不时就要用到,但是一些常用的片段却没有记住,这里整理一个笔记 常用片段 普通 文件所在目录 CUR_DIR="$(dirname $0)" 基本每个脚本都要用到,否则脚本执行的时候就容易受到当前目录的影响,可能出现执行结果不一致 if-elif-fi if condition; then commands; elif condition; then commands; fi 时间相关 当前时间 date +%Y%m%d%H%M%S 纪元秒 # 纪元秒,方便用来实现
十毛
2019/03/27
8560
Python 代码片段总结
生成的pyc可以跨平台使用,但是只能这样用python xxx.pyc,而不能使用./xxx.pyc执行,因为缺少了shebang的支持,不过貌似Binfmt_misc可以解决这个问题,ubuntu下apt-get install binfmt-support可以直接安装。
老高的技术博客
2022/12/28
6120
Python 代码片段总结
Lua代码片段收集
Lua实现闭包 --[[@Func :实现闭包 @Desc : 当一个函数内部嵌套另一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征我们称作词法定界]] function fuck() local i = 0 return function() i = i + 1 return i end end c1 = fuck() print(c1()) print(c1()) 序列化Lua表 -- Desc : 序列化Lua表(Co
晚晴幽草轩轩主
2018/03/27
9480
1049 数列的片段和 (20 分)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
4730
golang代码片段(摘抄)
用户1141560
2017/12/22
7490
golang代码片段(摘抄)
如何快速创建 Visual Studio 代码片段?
使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来。ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代码片段只能用在 ReSharper 插件中。如果团队当中有一些小伙伴没有 ReSharper(毕竟很贵),那么也可以使用到 Visual Studio 原生的代码片段。
walterlv
2023/10/22
4700
如何快速创建 Visual Studio 代码片段?

相似问题

socialengine与外部php网站集成

21

与外部系统集成

30

Facebook与外部网站的集成

20

JIRA与外部系统的集成

12

OpenERP (Odoo)与外部系统的集成

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文