视图仅在循环结束时更新

时间:2016-09-12 02:04:06

标签: aurelia aurelia-binding

我有一个递归函数,它将异步数据推送到用作视图模型的数组。其关联模板使用转发器显示数据。

如果我以空数组开始调用更新函数,则模板会在到达时逐个显示新数据。如果我以非空数组开头,则会按预期立即显示初始数据,但只有在更新函数退出后才会显示新数据。

在绝望中,我尝试了信号和/或任务队列来强制视图更新,但它们无济于事。

更新功能如下所示:

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;

我可能需要调用一个函数来访问数据,这与我的问题有关吗?

1 个答案:

答案 0 :(得分:0)

正如@AshleyGrant所猜测的那样,不要让这个悬而未决,它有一个错误,它与Aurelia的绑定无关,尽管承诺承诺承诺可能会吓到它用。