2016-03-23 13 views
1

zaman uyumsuz dizisi:node.js Ben eşzamanlı <code>async.each</code> kullanarak bir dizi üzerinde yineleme çalışıyorum yineleme

async.each(supplier_array, function(supplier) { 
    console.log('looking at : ' + supplier); 
    knex(host_name + '.order_item').where({ 
     supplier: supplier, 
     order_id: order_id 
    }).then(function(data) { 
     console.log(data); 
     knex(host_name + '.distributor').select() 
     .then(function(data) { 
      console.log(data); 
     }).catch(function(error) { 
      console.log('error: ' + error); 
     }); 
    }).catch(function(error) { 
     console.log('error: ' + error); 
    }); 
}); 

Benim supplier_array 3 öğesi vardır. Yani ne olacağını uygulaması (eşzamanlı) olmalıdır geçerli:

tedarikçisi için

1/ilk varış/ilk dizi elemanı:

  • console.log (tedarikçi)
  • console.log (order_item)
  • console.log (dağıtıcı) satıcılar 2/ikinci dizi elemanı için

:

  • console.log (teslimatçı)
  • console.log (order_item)
  • console.log (dağıtıcı) satıcılar 3/üçüncü dizi elemanı için

:

  • console.log (satıcılar)
  • console.log (order_item)
  • console.log (dağıtıcı)

Ancak, zaman uyumsuz hareket eder:

  • console.log (teslimatçı)
  • console.log (teslimatçı)
  • console.log (teslimatçı)

  • console.log (order_item)

  • console.log (order_item)
  • console.log (order_item)

  • console.log (dağıtıcı)

  • console.log (dağıtıcı)
  • console.log (dağıtıcı)

biri bana ulaşmak yardımcı olabilir istenen eşzamanlı olarak async içinde adımların içinden koşma etkisi?

Şimdiden teşekkürler!

+0

Neden bu bir sorun? – Wainage

+0

Her diz sözünde "geri dönüş" yapmanız gerekebilir. Bu, işlenmesi gereken bir söz olduğunu bildirmek için async'ı kabul eder. Deneyin ve doğru cevap olup olmadığını bana bildirin.Bu konuya kendimi knex ile girdim. Ayrıca, bir söz verdiğiniz için, “sonra” içerideki satırı 9. sıradaki bir seviyeye taşıyabilirsiniz. – Handonam

cevap

2

Seri sırayla yinelemek isterseniz, async.eachSeries'u kullanmalısınız. Böyle bir şey deneyin:

async.eachSeries(supplier_array, function(supplier, callback) { 
    console.log('looking at : ' + supplier); 
    knex(host_name + '.order_item').where({ 
     supplier: supplier, 
     order_id: order_id 
    }).then(function(data) { 
     console.log(data); 
     knex(host_name + '.distributor').select() 
     .then(function(data) { 
      console.log(data); 
      callback(); // Advance to next iteration here 
     }).catch(function(error) { 
      console.log('error: ' + error); 
      callback(error); // Also callback when error occurs 
     }); 
    }).catch(function(error) { 
     console.log('error: ' + error); 
     callback(error); // Also callback when error occurs 
    }); 
}); 
+0

Teşekkürler - onaylamak için - callback(), bir sonraki tedarikçiye bakmasını ve tüm bu işlemleri bir sonraki tedarikçiye uyguladığını söyleyecek? –

+0

Böyle görünüyor. Ayrıca, async.js README belgesinde belgelenen ortak bir tuzağa da dikkat etmelisiniz: https://github.com/caolan/async#synchronous-iteration-functions –