2016-03-19 53 views
1

Genel olarak bildirilen ve geri arama işlevi içinde atanan değişkene erişmeye çalışıyorum. Dışarıdaki değere erişmek istiyorum. Bunu yapmanın bir yolu var mı?Geri arama işlevi içinde atanan değişkene erişilemiyor

ne denedim:

Düğüm JS (ONVIF modülü).

var jsonObject ='['; 
var count = 0; 
var len = cams.length; 

cams.forEach(function(cam) { 
    var hardwareId,serialNumber; 
    cam.getDeviceInformation(function(a,b,c){ 
     hardwareId = b.hardwareId; 
     serialNumber = b.serialNumber;  
     console.log(hardwareId,serialNumber);//working here 
    }); 
    console.log(hardwareId,serialNumber);//getting undefined here 
    count++; 
    jsonObject +='{'; 
    jsonObject +='"hostname":"'+cam.hostname+'",'; 
    jsonObject +='"port":"'+cam.port+'",'; 
    jsonObject +='"hardwareId":"'+hardwareId+'",'; 
    jsonObject +='"serialNumber":"'+serialNumber+'"'; 

    if(count==len) { 
     jsonObject +="}"; 
    } else { 
     jsonObject +="},"; 
    }    
}); 
jsonObject +=']'; 
res.json(JSON.parse(jsonObject)); 

Ben asenkron çağrı kaynaklandığını biliyoruz. Birisi bu koda bakabilir ve daha iyi bir şekilde yazabilir.

+1

Değişkenlere işlevin dışında erişilebilir, ancak işlevi çağırmadan önce, değerleri "undefined" olacaktır. – Tushar

+0

Geri aranma işleminizin asla gerçekleştirilmediği veya "b._" un tanımsız olduğu anlaşılıyor. Geri arama gövdesine “console.log” (“Calling callback”, a, b, c) 'yi eklemeyi deneyin ve çıkıp çıkmadığını görün. Ayrıca, cam.getDeviceInformation'ın eşzamansız olarak çalıştığı da mümkündür - hemen dönebilir, sonra undefined'leri kaydedersiniz ve sonra geri arama çağrılır. –

+1

'.getDeviceInformation', sonuçları eşzamansız olarak döndürmek için görünür;' 'console.log()' '.getDeviceInformation' geri çağrısı tamamlanmadan önce çağrılır? 'SerialNumber' parametresini başka bir işlev çağrısına geçirebilir veya 'consoleDeviceInformation' geridönüşümünde' console.log() 'veya başka bir görev gerçekleştirebilirsiniz? – guest271314

cevap

0

Bu mümkündür, ancak işlev getDeviceInformation öğesine iletilirse, eşzamanlı olarak çağrılmazsa, değişkenler console.log çağrılırken hala undefined olur. Başka bir deyişle, erişilebilirlik değil, zamanlamadır.

İlgili konular