【发布时间】:2017-05-02 14:29:52
【问题描述】:
我正在尝试在我的 Ionic 2 应用程序中加载一些消息,并将它们存储在 SqLite db 中以避免多次下载它们。
所以基本上我会询问我的 Sqlite 保存的最后一个 ID,然后询问服务器所有比该 ID 更新的消息,然后用保存的消息填充板,直到我达到 20 条消息(显然只有一次调用)。
所以技术部分:我将所有这些消息放在一个数组中,应该在应用程序中显示一个 *ngFor。当我在 PC 上运行应用程序时,它显示正确(因此逻辑是正确的),但是当我在电话上运行应用程序时,就像 *ngFor 没有刷新并且消息没有显示一样。
顺便说一句,并非总是如此。如果我卸载页面,我会暂时看到消息(数组最终显示在 *ngFor 中),如果我再次加载它,它会显示它们(不是因为现在它们已保存,而是因为它们已经在某个缓存中我想想)。
答案是:我缺少的 *ngFor 有一个限制?我怎样才能让消息始终显示?我已经将消息限制从 100 降低到 20,但它并没有解决问题。
这是代码,包含三个承诺:
getMessages(){ this.dbService.getLastMessageId().then((data) => {
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);
}
});
});
});
}
【问题讨论】: