我试图将我在控制台日志中获得的值附加到数组中,但我一直未定义。我认为该函数是异步的,这就是为什么当我尝试在执行时访问它时未定义的原因。根据我从文档中理解的是,它的函数参数是一个回调参数,有人可以告诉我如何使用我得到的值附加到数组或字典。
var theparam = new ROSLIB.Param({
ros : ros,
name : formid.elements[i].name
});
theparam.get(function(value) {
console.log(value)
});
链接到文档here
答案 0 :(得分:1)
当调用函数时,您可以将回调函数的值添加到数组中。可能看起来如此:
var myArray = [];
theparam.get(function(value) {
myArray.push(value);
});
console.log(myArray);
修改强> 啊,那是因为在实际的.push完成之前处理了控制台日志(未同步)。尝试将进一步的处理代码放入回调函数中,如:
theparam.get(function(value) {
myArray.push(value);
console.log(myArray);
//Further code here
});
使用异步循环进行编辑:
function asyncLoop(iterations, func, callback)
{
var index = 0;
var done = false;
var loop = null;
loop =
{
next: function()
{
if (done)
{
return;
}
if (index < iterations)
{
index++;
func(loop);
} else
{
done = true;
callback();
}
;
},
iteration: function()
{
return index - 1;
},
// break: function()
// {
// done = true;
// callback();
// }
};
loop.next();
return loop;
}
您可以像以下一样使用它:
asyncLoop(iterations, function(loop)
{
//Iterations here
theParam.get(function(value)
{
myArray.push(value);
loop.next();
});
}, function()
{
//Finished loop
callback();
});