我开发了一个客户端库,其中包括一个名为
此对象包含一个名为
虽然
现在,假设用户想要迭代所有元素,直到由
我已经使用以下递归方法实现了这一点(最初我在这个答案中找到了这个解决方案):
问题是,使用
祝好, Galder
iterator()
的方法。该方法返回一个Promise实例,使用require('promise')
库创建完成一个迭代器对象。此对象包含一个名为
next()
的方法,它返回一个Promise对象,该对象被完成后将返回一个类似于这样的复杂对象:{done: [true|false], key: _, value: _}
。虽然
iterator()
可能会预取一些元素,但如果需要进行远程调用,则next()
需要返回一个Promise对象。现在,假设用户想要迭代所有元素,直到由
next()
返回一个包含done:true
的对象为止。我已经使用以下递归方法实现了这一点(最初我在这个答案中找到了这个解决方案):
var iterate = client.iterator();
iterateTeams.then(function(it) {
function loop(promise, fn) {
// Simple recursive loop over iterator's next() call
return promise.then(fn).then(function (entry) {
return !entry.done ? loop(it.next(), fn) : entry;
});
}
return loop(it.next(), function (entry) {
console.log('entry is: ' + entry);
return entry;
});
});
问题是,使用
require('promise')
库,是否可以构建一个非递归的解决方案?我对非递归方法感兴趣的原因是为了避免在迭代的条目数量过大时出现问题。祝好, Galder