knockout.js KnockoutJS从pureComputed返回一个承诺

smdncfj3  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个pureComputed函数,我想解析其中的一个promise,但是,当在模板中引用promotionPrice时,它显示的是promise unresolved([object Promise])。您知道我哪里出错了吗?调试后,我觉得我在代码中正确地解析了promise ...

this.promotionPrice = ko.pureComputed({
        read: async () => {
            const regionPrice = this.getRegionPrices().then(regions => _.meanBy(regions, region => region.price));
            return await regionPrice;
        },
        write: (newValue) => {
            // Relevant write code here
        }
    }).extend({ notify: 'always' });

在HTML模板中...

<input type="text" class="form-control spaced-select" data-bind="value: promotionPrice">
vwkv1x7d

vwkv1x7d1#

我不认为knockout subscribables支持异步读方法。你可以使用一个可观察的支持你的计算来代替写:
第一个
可能值得将此代码隔离到一个帮助程序中,并考虑错误处理。例如:
第一个
如果你问这个问题的原因并不是基于淘汰依赖关系来延迟获取数据,而是更多的是关于管理服务器和客户端状态,我认为你最好创建两个简单的可观察对象,并在视图模型中进行初始获取。
JS系统

const loading = ko.observable(true);
const serverState = ko.observable(null);
const clientState = ko.observable("");

const updateStateWithServerData = data => {
  serverState(data);
  clientState(data);
};

// Init
fetchData()
  .then(updateStateWithServerData)
  .finally(() => loading(false));

// Update after typing
clientState.subscribe(newValue => {
  loading(true);
  postData(newValue)
    .then(updateStateWithServerData)
    .finally(() => loading(false));
});

ko.applyBindings({ clientState, loading });

于飞:

<input data-bind="value: clientState, enable: !loading()" />

相关问题