Javascript 敲除JS-承诺递归

Javascript 敲除JS-承诺递归,javascript,asynchronous,recursion,knockout.js,promise,Javascript,Asynchronous,Recursion,Knockout.js,Promise,在这种情况下,我必须更新绑定到HTML元素的Knockout observable,并且它的值是由从服务器获取的异步操作更新的 我编写了以下示例代码: const viewModel=函数{ const self=这个; self.fetchResults=函数{ 常数id=ko.observe0; Fetchhttps://jsonplaceholder.typicode.com/photos .Then函数响应{ return response.json; } .Then函数数据{ idd

在这种情况下,我必须更新绑定到HTML元素的Knockout observable,并且它的值是由从服务器获取的异步操作更新的

我编写了以下示例代码:

const viewModel=函数{ const self=这个; self.fetchResults=函数{ 常数id=ko.observe0; Fetchhttps://jsonplaceholder.typicode.com/photos .Then函数响应{ return response.json; } .Then函数数据{ iddata.length; console.logid; } 返回id; }; }; ko.applybindingsnewviewmodel;
问题是,由于您使用的是表达式,因此函数在render上运行,并返回一个可观察值。当可观察对象的值发生变化时,它会使视图的该部分再次渲染,从而再次调用该函数,该函数将永远循环

你在评论中说:


实际上,我需要为同一页面中的不同获取URI多次调用此方法,并绑定到单独的HTML元素

…并将此示例添加到问题中:


实际上,我需要为同一页面中的不同获取URI多次调用此方法,并绑定到单独的HTML元素。更新同样的问题。@Ozil-Ah,问题编辑确实改变了一些事情。请参阅更新的答案。感谢您的详细回复。然而,问题的根源是什么?非常感谢您的帮助。@Ozil-我已经更新了我的想法,删除了第一个解决方案,因为它不适用于您更新的问题,将第二个解决方案绑定处理程序移到顶部,然后添加了第三个解决方案,让您保留相同的文本:fetchResults'url。快乐编码!
<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>