使用回调参数从函数中获取值

时间:2016-01-28 08:38:07

标签: javascript ros

我试图将我在控制台日志中获得的值附加到数组中,但我一直未定义。我认为该函数是异步的,这就是为什么当我尝试在执行时访问它时未定义的原因。根据我从文档中理解的是,它的函数参数是一个回调参数,有人可以告诉我如何使用我得到的值附加到数组或字典。

    var theparam = new ROSLIB.Param({
            ros : ros,
            name : formid.elements[i].name
        });


    theparam.get(function(value) {
            console.log(value)
        });

链接到文档here

1 个答案:

答案 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();
});