別の非同期の内部で非同期メソッド呼び出しを行う方法each
メソッド(NodeJS)?別の非同期 `each`メソッド(NodeJS)の内部で非同期メソッド呼び出しを行う方法は?
具体的な例 - データベースを使用して、すべてのレコードを削除する必要があります。 しかし、私はコレクション全体を削除することはできません、私はレコードを読んで、アプリでいくつかのビジネスロジックを実行し、それだけを削除する必要が削除前に、1つずつすべてのレコードを破壊する必要があります。
それでは、私たちのdeleteAll
メソッドを実装してみましょう(実際には、ノードMongoDBのネイティブドライバからの実際のAPIです):それを行うための方法、実際に
deleteAll = function(selector, callback){
collection.find(selector).each(function(err, doc){
if(err){
callback(err)
}else{
if(doc === null){
// each returns null when there's no more documents, we are finished.
callback(null)
}else{
doSomeBusinessLogicBeforeDelete(doc)
// How to delete it using asynchronous `remove` method?
collection.remove({_id: doc._id}, function(err){
// What to do with this callback?
// And how to make `each` wait untill we
// deleting this record?
???
})
}
}
})
}
あります
-collection.nextObject
メソッドを使用しての代わり
collection.each
は、私が知りたいのは、
each
を使ってこれを解決できるかどうかです。今は可能ではないと信じていますが、間違っているかもしれません。
UPDATE:まあ
Cursor.prototype.each = function(callback) {
var self = this;
if (!callback) {
throw new Error('callback is mandatory');
}
if(this.state != Cursor.CLOSED) {
process.nextTick(function(){
// Fetch the next object until there is no more objects
self.nextObject(function(err, item) {
if(err != null) return callback(err, null);
if(item != null) {
callback(null, item);
self.each(callback);
} else {
// Close the cursor if done
self.state = Cursor.CLOSED;
callback(err, null);
}
item = null;
});
});
} else {
callback(new Error("Cursor is closed"), null);
}
};
'each'メソッドのソースコードはありますか?あなたがそれを持っているなら、あなたを見つけることは非常に簡単です。 – hugomg