JS-узел асинхронной обработки событий - PullRequest
5 голосов
/ 22 мая 2011

Может ли кто-нибудь указать мне или объяснить какой-то шаблон проектирования на основе событий, который обрабатывает ситуацию ожидания двух событий, чтобы завершить выполнение действия.
У меня есть шаблон, который загружается асинхронно, и вызов базы данных, которыйтакже происходит в то же время.У меня есть ответ, который нужно выполнить только после того, как обе эти задачи будут выполнены.
Единственное решение, которое я могу придумать, - это сделать что-то уродливое, например, ввести логические значения, для которых установлено значение true, по окончании события, а затем проверить, чтобы увидетьесли они все правда.Есть ли лучший способ сделать это?

Ответы [ 2 ]

8 голосов
/ 24 мая 2011

Просто добавьте пример ответа Криса:

Использование асинхронного, https://github.com/caolan/async

async.parallel([
    function(callback){
        // query a database, lets say mongodb/mongoose
        User.findOne({email: email}, function(err, user){
            callback(err, user);
        });
    },
    function(callback){
        // Load a template from disk
        fs.readFile('views/user.html', function (err, data) {
            callback(err, data)
        });
    }
], function(err, results){
    // Should have [user, template data]
});

Или со счетчиками:

var user     = false,
    template = false,
    count    = 2;

function build_user_view(){
    // user, template should be available
}

User.findOne({email: email}, function(err, userDoc){
    user = userDoc;
    --count || build_user_view();
});


fs.readFile('views/user.html', function (err, data) {
    template = data;
    --count || build_user_view();
});
3 голосов
/ 22 мая 2011

Нет простого способа сделать это на самом деле, но есть множество библиотек управления потоком , которые обрабатывают подобные вещи.Простейшим способом может быть сохранение глобального счетчика, который увеличивается, когда вы запускаете асинхронный вызов, а затем уменьшает обратный вызов, когда он завершается.Каждая операция может проверять счетчик, когда завершается, и, если он равен нулю, запускает ответ, который зависит от того, завершен ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...