Node js-Websocket对象功能的同步执行

时间:2018-11-23 12:55:14

标签: javascript node.js server-side-scripting

我具有以下类似功能

//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。由于对象是从服务器返回的,因此无法向对象的功能添加承诺。有什么办法可以同步执行吗?

1 个答案:

答案 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(),并且仅在第二个回调来自回调时才比较两个值。