然后数组空承诺[重复]

Posted

技术标签:

【中文标题】然后数组空承诺[重复]【英文标题】:THEN ARRAY EMPTY PROMISSE [duplicate] 【发布时间】:2019-11-06 13:49:29 【问题描述】:

通过调用 Promise 创建一个在 Firestore 中获取时间的方法,但由于 Promise 尚未解决,因此数组为空。如何解决只有在 getTime() 调用终止时才调用数组。

Angular Cli 8

example.service.ts

teste: [];

getTime() 
    this.userCollection.ref.get()
      .then(res => 
        if (res.docs.length == 0) 
          alert('Não existem marcacoes até o momento por favor aguarde')
         else 
          res.forEach(ponto => 
            console.log(ponto.id);
            console.log(ponto.data().time.seconds * 1000);
            this.time.push(new Date((ponto.data().time.seconds * 1000)));
          )
        
      ).catch(err => 
        console.log(err);
      )
  
example.component.ts

ngOnInit() 
    this.mainService.getTime();
    console.log(this.mainService.time);
  

希望我调用的时候数组变量已经完整了。

【问题讨论】:

getTime 应该返回一些东西(一个 Promise)并且你应该等待它(使用.then())。 【参考方案1】:

您可以使用asyncawait

服务中。

getTime() 
    return this.userCollection.ref.get()
      .then(res => 
        if (res.docs.length == 0) 
          alert('Não existem marcacoes até o momento por favor aguarde')
         else 
          res.forEach(ponto => 
            console.log(ponto.id);
            console.log(ponto.data().time.seconds * 1000);
            this.time.push(new Date((ponto.data().time.seconds * 1000)));
          )
        
        return true;
      ).catch(err => 
        console.log(err);
      )
  

在组件中,

async ngOnInit() 
    await this.mainService.getTime();
    console.log(this.mainService.time);

【讨论】:

以上是关于然后数组空承诺[重复]的主要内容,如果未能解决你的问题,请参考以下文章

$.when 承诺对象不起作用[重复]

节点承诺和返回值

Javascript承诺链与重复逻辑附加到同一项目数组中。

将承诺的结果链接并传递给进一步的承诺[重复]

如何承诺等待所有对象完成然后推送到数组?

期待2个承诺的结果等于一个(结合2个承诺数组)