【发布时间】:2019-03-26 00:36:32
【问题描述】:
我有一种情况,我必须更新一个绑定到 HTML 元素的 Knockout observable,并且它的值正在通过异步操作(从服务器获取)进行更新。
我编写了以下示例代码:
const viewModel = function() {
const self = this;
self.fetchResults = function() {
const id = ko.observable(0);
fetch("https://jsonplaceholder.typicode.com/photos")
.then(function(response) {
return response.json();
})
.then(function(data) {
id(data.length);
console.log(id());
})
return id;
};
};
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="text: fetchResults()"></div>
它正在创建一个无限递归循环。
Knockout 是否因为值在异步函数内部更新而重复调用该函数?这个问题的根本原因是什么?
TIA!
编辑:
我在页面上有多个 HTML 元素请求绑定不同的信息,例如,
<div data-bind="text: fetchResults('some-url')"></div>
<div data-bind="text: fetchResults('some-different-url')"></div>
<div data-bind="text: fetchResults('another-url-altogether')"></div>
这意味着我需要在我所做的 fetchResults 函数中创建 observable(如果我的理解有误,请纠正我 :))
【问题讨论】:
标签: javascript asynchronous recursion knockout.js promise