iterator()
というメソッドを公開するクライアントライブラリを開発しました。このメソッドは、require('promise')
ライブラリを使用して作成されたPromiseインスタンスを返します。このインスタンスはイテレータオブジェクトで完成します。 {done: [true|false], key: _, value: _}
プロミスイテレータを反復する非再帰的メソッド
iterator()
が、それは、その結果の場合には約束を返すために、next()
ニーズをいくつかの要素をプリフェッチかもしれません:
このオブジェクトはこのような複雑なオブジェクトで完成された約束を返すnext()
と呼ばれる方法が含まれていますリモートコール。
今度は、next()
によって返されたPromiseが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')
ライブラリを使用して、可能である、です非再帰的な解法?私が非再帰的メソッドに興味を持っている理由は、反復処理するエントリの数が大きすぎると爆発するのを避けることです。
乾杯、 ギャルダー
ジェネレータや観測可能なものを探しているようですね。 – ssube
あなたは再帰を隠していますが、それでも再帰的な解決策をとることができます。 – smnbbrv
ガーダ、「The Collection Kerfuffle」というタイトルのセクションを読んでみてください(http://taoofcode.net/promise-アンチパターン/) –