2016-03-05 159 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