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.
Değişkenlere işlevin dışında erişilebilir, ancak işlevi çağırmadan önce, değerleri "undefined" olacaktır. – Tushar
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. –
'.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