事件发射器同步node.js客户端

时间:2013-03-17 17:21:32

标签: javascript node.js

function findById(id) {
    var fullName = "";
    client.emit("findById", id, function(result){
        fullName = result.fullName;
    });
}

我想从函数findById

中找到全名

当我调用函数findById result =“”

1 个答案:

答案 0 :(得分:3)

要使其同步,您必须使用循环锁定该函数。 我不建议这样做

function findById(id) {
   var fullname, waiting = true;

   client.emit("findById", id, function(result){
       fullname = result.fullName;
       waiting  = false;
   });

   while (waiting);
   return fullname;
}

最好只接受这个方法固有的异步,并将结果传递给回调:

function findById(id, callback) {
   client.emit("findById", id, function(result){
       callback(result.fullName);
   });
}

然后用法:

findById(id, function(fullName) { /* ... */ });

如果嵌套回调在您的应用程序中成为一个令人头痛的问题,那么有一些流控制库,如async(在Node和浏览器中运行),可以使事情更清晰,更易读。