使用嵌套的promises计算fromPromise在可观察的更改时不会重新评估?

时间:2018-04-04 14:31:15

标签: javascript reactjs mobx mobx-react mobx-utils

我遇到了这个问题,我有一些承诺的承诺的计算值,在observables上过滤,当它取决于变化的可观察量时,不会重新评估。这是一个例子,

class CustomerStore {
  @observable selectedCustomerId = "";
  @observable selectedHouseholdId = "";

  @computed
  get customer() {
    return this.selectedCustomerId
      ? fromPromise(api.getCustomerById(this.selectedCustomerId))
      : fromPromise.resolve(null);
  }

  @computed
  get customerRegisteredProducts() {
    return fromPromise(
      this.customer.then(customer => {
        return api.getCustomerRegisteredProducts(customer.identity.id).then(
          action(products => {
            this.selectedHouseholdId = products.map(p => p.householdId).shift();
            return products;
          })
        );
      })
    );
  }

  @computed
  get customerProducts() {
    return fromPromise(
      this.customerRegisteredProducts.then(registeredProducts => {
        return registeredProducts.filter(
            rp => rp.householdId === this.selectedHouseholdId
          );
      })
    );
  }
}

this.selectedHouseholdId由用户界面中的<select>字段更新,但我注意到customerProducts列表在更改时未重新评估。我做错了什么?

感谢您的帮助,

安德鲁

1 个答案:

答案 0 :(得分:0)

this.selectedHouseholdId的更改不会让customerProducts再次重新计算,因为在执行computed函数期间,此可观察对象无法访问当承诺解决了。

您可以在第一个computed函数中看到不同的内容:customer(), 当this.selectedCustomerId更改时,此功能将重新计算。