彼は、シーケンス ヘルパーについて言及していた可能性があります。次のコールバックで 1 つのタスクを実行すると、チェーンが同期的に実行されることになります。
これは、膨大な量のデータを Mongo コレクションに挿入するために使用するジェネレーターの例です。これにより、並行して実行される操作のシーケンスが生成されます。この場合、コールバック メソッドを使用してそれらを連鎖させて 100 万回の挿入を実行することは、あまり実用的ではありません。そのため、以下のようなジェネレーター/シーケンス ヘルパーを使用します。
var Inserter = function (collection) {
this.collection = collection;
this.data = [];
this.maxThreads = 30;
this.currentThreads = 0;
this.batchSize = 1000;
this.queue = 0;
this.inserted = 0;
this.startTime = Date.now();
};
Inserter.prototype.add = function(data) {
this.data.push(data);
};
Inserter.prototype.insert = function(force) {
var that = this;
if (this.data.length >= this.batchSize || force) {
if (this.currentThreads >= this.maxThreads) {
this.queue++;
return;
}
this.currentThreads++;
console.log('Threads: ' + this.currentThreads);
this.collection.insert(this.data.splice(0, this.batchSize), {safe:true}, function() {
that.inserted += that.batchSize;
var currentTime = Date.now();
var workTime = Math.round((currentTime - that.startTime) / 1000)
console.log('Speed: ' + that.inserted / workTime + ' per sec');
that.currentThreads--;
if (that.queue > 0) {
that.queue--;
that.insert();
}
});
}
};