首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离子2* in用于在promise中按promise刷新(in promise)

离子2* in用于在promise中按promise刷新(in promise)
EN

Stack Overflow用户
提问于 2016-12-17 02:30:28
回答 1查看 398关注 0票数 0

我正在尝试在我的ionic2应用程序中加载一些消息,并将它们存储在SqLite数据库中,以避免多次下载它们。

所以基本上我询问我的Sqlite保存的最后一个ID,然后询问服务器所有比该ID更新的消息,然后用保存的消息填充黑板,直到我达到20条消息(显然只有一个调用)。

所以技术部分:我将所有这些消息放在一个数组中,它应该用*ngFor显示在应用程序中。当我在PC上运行应用程序时,它显示正确(所以逻辑是正确的),但当我在手机上运行应用程序时,就好像*ngFor没有刷新,消息也没有显示。

顺便说一句,并不总是这样。如果我卸载页面,我会看到一段时间的消息(数组最终显示在*ngFor中),如果我再次加载它,它会显示它们(不是因为它们现在被保存了,而是因为我认为它们已经在某个缓存中了)。

答案是:我错过的*ngFor是有限制的吗?如何才能让消息始终显示?我已经将消息限制从100降低到20,但这并没有解决问题。

以下是代码,以及三个承诺:

getMessages(){ this.dbService.getLastMessageId().then((data) => {

代码语言:javascript
复制
  let lastId = 0;     
  if (data.res.rows.length > 0)
    lastId= data.res.rows.item(0).Id;


    this.http.get(URL+lastId)
      .subscribe(data => {

      var response = data.json();
      let newMessagesCount = response[0].count;
      for (let i =1; i<=newMessagesCount; i++)
        this.messages.push(response[i]);

      if (newMessagesCount <20)
        this.dbService.getOldChatMessages(20-newMessagesCount).then((data) => { 

      if (data.res.rows.length > 0){
        let rowsCount = data.res.rows.length;
        for (let i=0; i<rowsCount;i++){
          let newElement = {
            Name: data.res.rows.item(i).Name,
            Date: data.res.rows.item(i).mexDate,
            Text: data.res.rows.item(i).mexText,
            Id: data.res.rows.item(i).Id,
            New: 0
            };
          this.messages.push(newElement);

          }                
      }
     //HERE I EXPECT THE ARRAY TO BE READY
      if(newMessagesCount>0){
        this.dbService.storeNewChatMessages(response);                    
        }
      });
    });
  });

}

EN

回答 1

Stack Overflow用户

发布于 2016-12-18 08:42:23

尝试将for循环放在如下所示的区域中:

代码语言:javascript
复制
import { NgZone } from '@angular/core';

export class MyPage {
  zone: NgZone;

  constructor() {
    this.zone = new NgZone({enableLongStackTrace: false});
  }

  getMessages() {

    this.zone.run(() => {
      for (let i =1; i<=newMessagesCount; i++) {
        this.messages.push(response[i]);
      }
    });

    this.zone.run(() => {
      for (let i = 0; i < rowsCount; i++) {
        let newElement = {
          Name: data.res.rows.item(i).Name,
          Date: data.res.rows.item(i).mexDate,
          Text: data.res.rows.item(i).mexText,
          Id: data.res.rows.item(i).Id,
          New: 0
        };

        this.messages.push(newElement);
      }
    });
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41190389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档