无法访问回调函数内部分配的变量

时间:2016-03-19 10:56:21

标签: javascript node.js

我正在尝试访问全局声明并在回调函数内分配的变量。我想访问外面的值。有没有办法做到这一点?

我尝试了什么:

节点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));   

我知道这是由于异步调用。有人可以查看代码并告诉更好的方法来写这个。

1 个答案:

答案 0 :(得分:0)

这是可能的,但是如果传递给getDeviceInformation的函数没有被同步调用,那么在调用undefined时变量仍然是console.log

换句话说 - 它不是可访问性问题,而是时间问题。