2016-03-05 186 views
1

我应该如何重构此代码以正确地等待_getWorkerId函数及其结果?等待函数结果

var EventsPersistancyService = { 
    accept: function acceptService(msg) { 

    function _getAppCategory() { 
    } 

    function _getWorkerId(user_sid, login) { 
     Worker.findByLogin(login, function(res){ 

     }); 
    } 

    var content = msg.content.toString(); 
    content = JSON.parse(content); 
    content["app_category"] = _getAppCategory(); 
    content["worker_id"] = _getWorkerId(); 

    Event.create(content).then(function (x) {}); 
    } 
} 
+0

添加回调函数作为第三个参数。 – Nonemoticoner

回答

0

添加回调函数的第三个参数:

function _getWorkerId(user_sid, login, cb) { 
    Worker.findByLogin(login, function(res){ 
     // here process data from res and create `response` variable 
     // ... 
     cb(response); 
    }); 
} 

然后调用_getWorkerId这样的:

_getWorkerId(1, "login", function (response){ 
    content["worker_id"] = response; 
}); 

就是这样。这是异步方法。

+0

它当然会改变代码的外观。我的意思是在非异步方法中有2个函数,下一个字段分配,最后是做一些查询(Event.create)。代码很容易阅读。 – userbb

+0

如果你想让它同步,你必须同时获得'findByLogin'函数。它似乎并不像你的代码中有回调。 – Nonemoticoner

+0

@userbb我敢打赌,你希望你的代码更像C++ - 逐行执行。但这通常不是JavaScript。 – Nonemoticoner