2012-01-05 16 views
5

tamamlamak için: Ben fonksiyonları bir dizi numarasına sahip olduğunda ben paralel için kullanmak zaman uyumsuz kütüphane, içine baktımnode.js çoklu fonksiyonları bekliyorum yüzden şöyle görünür koda sahip

var data = someobject; 

for(var x in data){ 
    mongo.findOne({ _id:data[x]._id },function(e,post){ 
     if(post != null){ 

      post.title = 'omg updated'; 
      post.save(function(){ 
       console.log('all done updating'); 
      }); 

     } 
    }); 
} 

// I need all^those functions to be done before continuing to the following function: 
some_function(); 

Ben 1 kez koşmaya ihtiyacım var. Fakat istenen etkiyi nasıl gerçekleştireceğimi bilmiyorum.

Tüm bu işlevler paralel olarak çalışabilir, sadece ne zaman yapıldığını bilmem gerek.

+0

Bir arıyorsanız emin değilim terbiyeli kütüphane, ama sadece önemsiz bir şeye ihtiyacınız varsa, sadece bir sayaca sahip olabilirsiniz: '' Object.keys (data) .length '' i, başlangıçta '.save' geri aradığında '0' a ulaştığında , 'some_function() 'komutunu çalıştırın. – pimvdb

+0

@pimvdb işe yarayacaktı (tam olarak ne düşündüğüm buydu), ancak bu sadece biraz küçük bir kesmek ve koşmak, bunu yapmanın doğru bir yolunu bulmak için bir pub/alt mesaj sistemine gerek olaylar ve geri bildirimlerle çok dağınık) –

cevap

8

Bu dizideki öğeleri paralel görevleri yürütmek ve sonra bir geri çağırma, örnek çağıracağı Async's forEach yöntemi için mükemmel bir durumdur:

async.forEach(Object.keys(data), function doStuff(x, callback) { 
    // access the value of the key with with data[x] 
    mongo.findOne({ _id:data[x]._id },function(e, post){ 
    if(post != null){ 
     post.title = 'omg updated'; 
     post.save(callback); 
    } 
    }); 
}, function(err){ 
    // if any of the saves produced an error, err would equal that error 
});