首页 > 解决方案 > 在执行下一行之前等待 foreach 完成

问题描述

我希望代码等待 foreach 函数完成,然后再转到下一行对计数器编号执行 if 语句。我确定我必须在某个地方放一个 Promise ......但我也认为 .then() 会成功吗?

似乎有这样的例子,但我无法弄清楚这个或我在这里出错的地方:

      async getSomeData () {
        
            const data = [];
            const ref = fire.firestore();
            
        
            ref
            .collection(‘foo’)
            .where(‘open’, '==', true)
            .get()
            .then(async snapshot => {
               let count = 0;
               snapshot
                .docs
                .forEach(async doc => {
                  const {foo, bar} = doc.data();
                  const number_count = await this.getNumber(doc.id);
        
                  if (number_count >= 1){
                    count++;
                    data.push({
                      foo,
                      bar
                    });
        
                  this.setState({
                    data : data,
                });
              }
            })
        
    .then() ?????
          **//THIS IS EXECUTING BEFORE THE FOREACH FINISHES** 
    
              if(count==0){
                this.setState({
                  isLoading: false,
                  noStores: true
                  });
          }
        
        
        
          }).catch(error => {
              console.log(error);
        
                //if fails
                this.setState({
                  noStores : true,
              });
            });
        
          };

感谢我能得到的任何帮助。谢谢!

标签: javascriptfirebase

解决方案


javascript 代码,默认情况下将在移动到下一行之前完成。这是它的自然行为。如果您只是正常编写代码,它将一次执行一行。

您已在代码中添加了“异步”标签,然后要求它不要以异步方式运行,这完全合乎逻辑。

如果您希望代码以完成 foreach 的方式执行,只需不要添加任何异步标签。


推荐阅读