1
我想訪問全局聲明並在回調函數內部分配的變量。我想訪問外面的值。有沒有辦法做到這一點 ?無法訪問內部回調函數分配的變量
我的嘗試:
節點JS(ONVIF模塊)。
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));
我知道這是由於異步調用。有人可以看看代碼,並告訴更好的寫法。
變量可以在函數之外訪問,但在調用函數之前,它們的值將是'未定義的'。 – Tushar
它看起來像你的回調永遠不會執行,或者'b._'未定義。嘗試在回調主體中添加'console.log(「Calling callback」,a,b,c)'並查看它是否出來。 'cam.getDeviceInformation'也可能異步工作 - 它可能會立即返回,然後記錄未定義的內容,然後調用回調函數。 –
'.getDeviceInformation'似乎異步返回結果,在'.getDeviceInformation'回調完成之前調用console.log()'?您可以將'serialNumber'作爲參數傳遞給另一個函數調用,或者在'getDeviceInformation'回調中執行'console.log()'或其他任務? – guest271314