我具有以下类似功能
//Have to connect to a websocket
var websocket = new WebSocket(wsUri);
var channel = new WebChannel(websocket);
网络渠道返回一个具有功能列表的对象
//The following functions
actualTest1Value = 1;
actualTest2Value = 2;
objectReturned = channel.object.objectReturned
test1= objectReturned.getValueFor("Sample");
test2 = objectReturned.getValueFor("Sample1");
if(test1 === actualTest1Value && test2 === actualTest2Value)
{
//do some Operation
}
这里的问题是,由于节点js的异步特性,未定义test1和test 2。由于对象是从服务器返回的,因此无法向对象的功能添加承诺。有什么办法可以同步执行吗?
答案 0 :(得分:0)
我做了一个小的解决方法,一个接一个地执行。
test1 = objectReturned.getValueFor("Sample", function(returnVal){
test1 = returnVal;
compare();
});
test2 = objectReturned.getValueFor("Sample1", function(returnVal){
test2 = returnVal;
compare();
});
将比较结果包装到单独的函数中
function compare()
{
//before doing this check test2 is not undefined, because both values will be
//defined on second callback.
if(test1 === actualTest1Value && test2 === actualTest2Value)
{
//do some Operation
}
}
我很幸运能够将test1和test2作为全局变量,并在每个函数的回调上调用函数compare(),并且仅在第二个回调来自回调时才比较两个值。