Javascript 谷歌+;hangouts将值存储在状态gapi.hangouts.data中

Javascript 谷歌+;hangouts将值存储在状态gapi.hangouts.data中,javascript,asynchronous,google-plus,hangout,Javascript,Asynchronous,Google Plus,Hangout,我现在遇到了一个小问题:需要在状态中存储一个随机数,这将持续存在于所有参与者 alert(delta[random]); 返回值,因此到目前为止一切都正常,但这就是神秘的开始: 我已经试过了 $.each(gapi.hangout.data.getKeys(),function(i,o){ alert(o); }); 但它从未进入循环。但是如果我 alert('dfsdasd'); 提交Delta后,它就可以工作了。 最后两行 alert(gapi.hangout.data.ge

我现在遇到了一个小问题:需要在状态中存储一个随机数,这将持续存在于所有参与者

alert(delta[random]); 
返回值,因此到目前为止一切都正常,但这就是神秘的开始:

我已经试过了

$.each(gapi.hangout.data.getKeys(),function(i,o){
alert(o);
});
但它从未进入循环。但是如果我

alert('dfsdasd');
提交Delta后,它就可以工作了。 最后两行

    alert(gapi.hangout.data.getValue(random));
    $("#randomNumber").val(gapi.hangout.data.getValue(random));
已死亡,没有带有“未定义”或[对象]的警报

function setRandom()
    {
        var rand = Math.floor(Math.random()*100);
        var random = "randomNumber";
        var delta = {};
        delta[random] = JSON.stringify(rand);
        alert(delta[random]);

        gapi.hangout.data.submitDelta(delta);

        alert(gapi.hangout.data.getValue(random));
        $("#randomNumber").val(gapi.hangout.data.getValue(random));
    }
我包括 两个图书馆 src=“//talkgadget.google.com/hangouts/\ux/api/hangout.js?v=1.1” 和src=”http://code.jquery.com/jquery-1.7.2.js"

OnState上的处理程序未更改

我做错了什么?
每当我触摸gapi.hangouts.data时,它都会失败。

我发现这里有两个问题

第一个是定义为接受两个参数,而您只提供一个

另一个问题是submitDelta()是异步的,因此您不应该期望getValue()或getState()在调用后立即工作。在这种情况下,处理问题的最佳方法是使用onStateChanged.add()注册StateChangeEvent

例如,您可以这样做:

function init(){
    gapi.hangout.data.onStateChanged.add( handleChange );
    submitRandom();
}

function handleChange( stateChangedEvent ){
    var random = "randomNumber";
    var val = gapi.hangout.data.getValue(random);
    alert(val);
    $("#randomNumber").val(val);
}

function submitRandom(){
    var rand = Math.floor(Math.random()*100);
    var random = "randomNumber";
    var delta = {};
    delta[random] = JSON.stringify(rand);
    alert(delta[random]);

    gapi.hangout.data.submitDelta(delta, []);
}

我看到这里似乎有两个问题

第一个是定义为接受两个参数,而您只提供一个

另一个问题是submitDelta()是异步的,因此您不应该期望getValue()或getState()在调用后立即工作。在这种情况下,处理问题的最佳方法是使用onStateChanged.add()注册StateChangeEvent

例如,您可以这样做:

function init(){
    gapi.hangout.data.onStateChanged.add( handleChange );
    submitRandom();
}

function handleChange( stateChangedEvent ){
    var random = "randomNumber";
    var val = gapi.hangout.data.getValue(random);
    alert(val);
    $("#randomNumber").val(val);
}

function submitRandom(){
    var rand = Math.floor(Math.random()*100);
    var random = "randomNumber";
    var delta = {};
    delta[random] = JSON.stringify(rand);
    alert(delta[random]);

    gapi.hangout.data.submitDelta(delta, []);
}

非常感谢你,先生,你改变了战局!问题是gapi.hangout.data.submitDelta(delta,[]);没有通过额外的阵法,不知何故我认为它是可选的。非常感谢您,先生,您已经改变了战斗的潮流!问题是gapi.hangout.data.submitDelta(delta,[]);没有传递额外的数组,不知何故我认为它是可选的。