在javascript中,当一个方法调用自身时,通过将递归调用 Package 在setTimeout
中,可以防止“过多递归”错误。例如,下面的事件处理程序使用array.shift()
和递归而不是循环,一次向可观察到的敲除数组中添加一项:
$(document).on("AddPizzaFan", function (event, data, results) {
var item = data.shift();
var fan = new PizzaFan(
item['firstname'],
item['lastname'],
item['favoritePizzaTopping']
)
myObservableArray.push(fan);
if (data.length > 0) {
setTimeout(function () { $(document).trigger("AddPizzaFan", [data, myObservableArray]); }, 1);
}
});
该方法允许绑定到KO可观测量的UI组件一次一个数据行地更新,从而即使当data
包含数千行并且如果data
数组被简单地一次全部馈送到UI则可能另外需要5或10或甚至60秒或更长时间来出现时,也使UI看起来快速且响应性强。当数组以许多小比特馈送到UI时,用户立即开始在屏幕上看到数据。(FWIW,实际的应用是文本语料库搜索,其中返回包含用户的搜索项或搜索短语的许多文本段落。)
在C#中使用Stack
和async await
可以完成类似的操作吗?阅读this question and answer时,似乎不能,至少不容易。如果可以在C#中完成类似的操作,它是如何完成的?
1条答案
按热度按时间cetgtptt1#
我认为你的代码可以用C#实现如下:
递归实现:
非递归实现(推荐):