2016-03-29 16 views
0

Sorun yaşıyorum, temel olarak, bu async şelalesi tamamlandığında bir işlevi çağırmak istiyorum. Sorun şu anda bir güncelleştirme diyor, ancak güncellemem tamamlanmadan önce devam ediyor. Aramak istediğim işlev, bu verilere zaten güncellendi.Görev tamamlanmadan önce NodeJS async sonlandırılıyor

İleti gönderilemedi bile. Ama sonunda veritabanında güncellenecek.

function(arg1, arg2, callback) { 
    console.log('Updating current_pot with amountInPot'); 
    current_pot.findOneAndUpdate(
     {}, 
     {'amountInPot': currentlyInPot}, 
     function(err, current) { 
      if (err) { 
       throw err; 
      } 
      if (current != null) { 
       console.log('Updated current_pot amountInPot'); 
       callback(null, 'c'); 
       //This message should be sent before the callback continues! 
      } 
     }); 
    } 

tüm kod:

async.waterfall([ 
    function(callback) { 
     //remove from db 
     console.log('Add to local pot!'); 
     currentlyInPot++; 
     peopleInPot.push([user.local.picture, message[1], user.local.email]); 
     callback(null, 'a', 'b'); 
    }, 
    function(arg1, arg2, callback) { 
     console.log('Updating persons credits'); 
     callback(null, 'c', 'd'); 
    }, 
    function(arg1, arg2, callback) { 
     console.log('Adding new people to db'); 
     var newPeople = new people_pot(); 
     newPeople.email = user.local.email; //Auto increment 
     newPeople.picture = user.local.picture; 
     newPeople.message = message[1]; 

     /** success starts */ 
     newPeople.save(function(err) { 
      if (err) { 
       throw err; 
      } 
     }); 

     callback(null, 'a', 'b'); 
    }, 
    function(arg1, arg2, callback) { 
     console.log('Updating current_pot with amountInPot'); 
     current_pot.findOneAndUpdate({}, { 
      'amountInPot': currentlyInPot 
     }, 
    function(err, current) { 
     if (err) { 
      throw err; 
     } 
     if (current != null) { 
      console.log('Updated current_pot amountInPot'); 
      callback(null, 'c'); 
      //This isn't getting completed before the loadpot is called! 
     } 
    }); 
} 
], function(err, result) { 
    // result is 'e' 
    //add to db 
}); 

cevap

1

Tamamlamak için newPeople.save'u beklemeyi unutmuşsunuzdur. Geri arama fonksiyonunun çağrısını geri aramaya koyun. (callception)

/** success starts */ 
    newPeople.save(function(err) { 
     callback(err, 'a', 'b'); 
    }); 
0

kullanımı son satırında .o() ve orada işlev eklemek.

+0

Bu soruya bir cevap vermemektedir. Yeterli [itibara] sahip olduğunuz zaman (http://stackoverflow.com/help/whats-reputation) herhangi bir gönderiye yorum yapabilirsiniz (http://stackoverflow.com/help/privileges/comment); bunun yerine, [askerden açıklama istemeyen cevaplar verin] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-yerine). - [Yorum Yaz] (/ review/düşük kaliteli yazılar/11812032) –

+0

Bunun cevabın olmadığını biliyorsunuz ve eğer doğru cevabı biliyorsanız, o zaman bunu sağlamalısınız? – user3151766

+0

Her zaman cevabı açıklamaya çalışın. Tek hatlı cevaplar asla iyi olmaz. Cevabınızı OP'nin koduyla birleştirmeyi deneyin. Cevabınız bir yoruma benziyor. –

İlgili konular