2016-04-04 20 views
2
var responseArr = new Array(); 
async.each(response, function (value, k) { 
    if(isDateFlag) 
    { 
     var defaultValue = value.auction_id; 
     grpArray.push(value.title); 
     var postData = { 
      parent_id : parent_id, 
      defaultValue : defaultValue, 
      isDateFlag : isDateFlag, 
      search_text : search_text 
     } 
     getChildNotificationList(postData, function (childArrayData) { 
      //Creating the response array 

      responseArr.push({ 
       'notification_id' : childArrayData['notification_id'], 
       'notification_text' : childArrayData['notification_text'] 
      }); 
     }); 

    } 
}); 

return responseArr;//Blank Array 

Son yanıtı, alt veri sorgusundan değiştirdikten sonra döndürmek istiyorum. Boş yanıt dizisi döndürür çünkü sorgu yanıtını beklemez.Javascript veya düğümde nasıl uyumsuz hale getirilir?

Öyleyse nasıl eşzamansız olabilir. Teşekkürler

+3

Olası kopyalar http://stackoverflow.com/questions/14220321/how -do-i-bir-eşzamansız-cevap-cevap) –

+0

'' 'yerine' async.map' kullanmalısınız. Ve sen de 'k' demelisin. – Bergi

+0

http://justinklemm.com/node-js-async-tutorial/ burada takip edebileceğiniz güzel bir örnek ... @Bergi: Neden async.map() ?? neden yeni dizi? – Thalaivar

cevap

3

http://justinklemm.com/node-js-async-tutorial/ ve https://github.com/caolan/async'dan sözediyorum.

Bunun nedeni, javascript'in eşzamanlı olduğundan bu yana, kodun yürütülmesine devam edilmesidir. Beklenen sonucu almak için aşağıdaki kodu değiştirin:

var responseArr = new Array(); 
async.each(response, function (value, k) { 
    if(isDateFlag){ 
    var defaultValue = value.auction_id; 
    grpArray.push(value.title); 
    var postData = { 
     parent_id : parent_id, 
     defaultValue : defaultValue, 
     isDateFlag : isDateFlag, 
     search_text : search_text 
    } 
    getChildNotificationList(postData, function (childArrayData) { 
     //Creating the response array 

     responseArr.push({ 
     'notification_id' : childArrayData['notification_id'], 
     'notification_text' : childArrayData['notification_text'] 
     }); 
     k(); 
    }); 
    } else { 
    k(); 
    } 
}, function (err) { 
    if (err) { 
    console.log(err); 
    } else { 
    return responseArr; 
    } 
}); 

Yukarıdaki kod bir fonksiyon bloğunun içinde. Sonucu işlevi çağırarak alabilirsiniz. async.map kullanarak cevap Dahil

:

async.map(response, function (value, k) { 
    if(isDateFlag){ 
    var defaultValue = value.auction_id; 
    grpArray.push(value.title); 
    var postData = { 
     parent_id : parent_id, 
     defaultValue : defaultValue, 
     isDateFlag : isDateFlag, 
     search_text : search_text 
    } 
    getChildNotificationList(postData, function (childArrayData) { 

     k(null, { 
     'notification_id' : childArrayData['notification_id'], 
     'notification_text' : childArrayData['notification_text'] 
     }); 
    }); 
    } else { 
    k(null, { 
     'notification_id' : '', 
     'notification_text' : '' 
    }); 
    } 
}, function(err, results){ 
    // results is now an array 
    return results; 
}); 
[? Ben bir zaman uyumsuz çağrısından yanıtı dönmek nasıl] (içinde
+0

Döngü devam edene kadar her zaman diziyi döndürecek .... Ana veri Array –

+0

içine itilmiş tüm çocuk verileri sonra bir kez göndermek gerekir Ben bunu belirtmeliyim Doğru bir kod örneği sağlayarak sorunuz. Gönderdiğiniz soru için cevap verdim. Döngüden bahsetmedin. :) – Madhukar

+0

kodu async.each döngüsüyle başlıyor .. teknik adamlardan bahsetmeye gerek yok. –

İlgili konular