我有一个递归函数,它将异步数据推送到用作视图模型的数组。其关联模板使用转发器显示数据。
如果我以空数组开始调用更新函数,则模板会在到达时逐个显示新数据。如果我以非空数组开头,则会按预期立即显示初始数据,但只有在更新函数退出后才会显示新数据。
在绝望中,我尝试了信号和/或任务队列来强制视图更新,但它们无济于事。
更新功能如下所示:
refresh = () => {
dataService.fetch1().then((data1) => {
return dataService.fetch2(data1);
}).then((data2) => {
return dataService.fetchOneByOne(0);
}).then((result) => {
LOGGER.info('congrats');
}).catch((error) => {
LOGGER.error('what a shame');
}).finally(() => {
LOGGER.info('done');
});
};
递归更新函数如下所示:
function fetchOneByOne(counter) {
return otherService.fetch1()
.then((data1) => {
modelService.addData(data1);
counter++;
if (counter < aLimit) {
return fetchOneByOne(counter);
}
}, (error) => {
if (error.message === 'i am recoverable') {
LOGGER.warn(error.message);
counter++;
if ( counter < aLimit) {
return fetchOneByOne(counter);
}
} else {
LOGGER.error('we are doomed');
}
});
}
最后,模板绑定到&#39; modelService&#39;。
的数据你知道在什么情况下会发生这种情况吗?提前感谢任何建议。
修改
以下是关于modelService的一些其他信息,以防它被证明是相关的。
由modelService管理并由所有视图引用的数据结构如下所示:
let modelData = [{
"id": "",
"someData": [],
"moreData": []
}, {}, {}, ...
]
因此addData如下所示:
modelService.addData(data1) {
modelData.find((item) => { return item.id === data1.id })['someData'].push(data1);
}
单个视图模板通过调用如下函数绑定到它们的数据:
return modelData.find((item) => { return item.id === inputId; }).someData;
我可能需要调用一个函数来访问数据,这与我的问题有关吗?
答案 0 :(得分:0)
正如@AshleyGrant所猜测的那样,不要让这个悬而未决,它有一个错误,它与Aurelia的绑定无关,尽管承诺承诺承诺可能会吓到它用。