我有這個功能。基本上,它從數據庫中搜索數據,並用它做一些事情。在這個演示中,它只是增加計數器。在Node.js中添加延遲('data')執行
exports.fullThreads = function(){
return new Promise((resolve, reject) => {
MongoClient.connect(mongoUrl, (err, db) => {
var fullThreads = db.collection('tmp_fullThreads'),
threadPages = db.collection('tmp_threadPages').find();
var counter = 0;
threadPages.on('data', (doc) => {
setTimeout(function(){
counter++;
}, 200)
});
threadPages.on('end',() => {
console.log('end');
console.log(counter);
});
});//connect
});//promise
}//fullthreads
在這個例子中,我預計它會調用數據,等待200ms,然後增加計數器。一旦達到目的,它就會結束。但它是不同的。在on('data')
實際完成之前調用on('end')
。我想這是因爲它沒有立即返回值。所以這個setTimeout
函數不是一種方法。不過,我在這裏遇到了一個問題。這太簡單了,在現實生活中,這不會增加計數器,它會調用外部API,因爲它在很短的時間內不能接受太多的調用,所以我想在每次調用之間做一個延遲,這樣做是否正確?
您是否嘗試過使用streams2方法(例如'threadPages.read()'和''readable''事件)而不是使用''data''事件處理程序?否則,你應該能夠根據需要手動'暫停()'和'恢復()'流。 – mscdex