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