Node.jsをあまり長く使用していないので、次の問題が発生しました。コールバック駆動型パラダイムを使用して、同期コードで使用したループを再帰に変換する必要があることを理解しています。私の問題は、ノードが再帰でどの程度深くなるかを理解できないことです。異なるテストでの結果には一貫性がありません。たとえば、Webで見つけたコードを試しました。
var depth = 0;
(function recurseBaby() {
// log at every 500 calls
(++depth % 500) || console.log(depth);
// bail out ~100K depth in case you're special and don't error out
if (depth > 100000) return;
recurseBaby();
})();
18500回の再帰の後、ノード例外(最大再帰深度)が発生します。そこで、キューの操作など、いくつかの機能を追加しようとしました。
var depth = 0,
Memcached = require('memcached'),
memcacheq = new Memcached('127.0.0.1:22201');
(function recurseBaby() {
// log at every 500 calls
(++depth % 500) || console.log(depth);
// bail out ~10M depth in case you're special and don't error out
if (depth > 10000000) return;
memcacheq.set('test_queue', 'recurs' + depth, 0, function (error, response) {
return recurseBaby();
});
})();
まだ終了していませんが、これまでのところ400万回以上の再帰で機能します(実際にはキューがいっぱいになっています)。そこで、ノードで再帰深度制限がどのように機能するかを明確にしたいと思います。私の推測では、再帰的に呼び出される関数で何かを行うと、ノードは呼び出しスタックを解放するためのより多くの時間を持っていますが、私はひどく間違っている可能性があります。より経験豊富なノードユーザーからの説明は大歓迎です。