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

Смежные вопросы