2014-01-21 4 views
0

Я хотел бы знать, как наилучшим образом обрабатывать событие api. Моя первая мысль заключается в том, чтобы обернуть его в обратный вызов api, но у меня есть ощущение, что я блокирую здесь и что это не лучший подход.Событие api и/или обратный вызов api в nodejs

Учитывая У меня есть LIB, который возвращает значения из БД, и это evented:

var connection = new Connection(config); 
var query = new Query(); 
query.on('data',function(row){}); 
query.on('done',function(){}); 

Это мое взятие ...

getAllCustomer(clb){ 

    var connection = new Connection(config); 
    var query = new Query(); 
    var results = []; 

    query.on('data',function(row){ 
     results.push(row); 
    }); 
    query.on('done',function(){ 

     clb(results); 

    }); 

    connection.execute(query); 
    connection.close(); 
} 

Я хотел бы использовать это в hapijs или expressjs приложение

, как использовать его, как это

handler: function(request,reply){ 

    getAllCustomer(function(err,result){ 
     reply(result); 
    }); 
} 

getAllCustomers(), кажется, блокируется, пока запрос не будет выполнен! Итак, каков был бы рекомендуемый способ справиться с этим? Является ли дизайн dessicion правом обернуть событие api в обратном вызове api? Или мне нужно передавать строки потоковой передачи вместе с expressjs/hapijs? Итак, я ищу способ наилучшей практики ... путь узла ...

Спасибо за любую помощь.

ответ

0

В примере кода, который вы предоставили getAllCustomers() будет блокирование, только если connection.execute(query) блокирует - и, кажется, дело, причина в противном случае, если он был асинхронным - он был бы закрыт последующим вызовом connection.close(), прежде чем он даже имел возможность запуска запроса. Если это не синхронизация/блокировка - вам нужно скомпрометировать sonnection в обратном вызове done

+0

Я изменил api, теперь я, чтобы закрыть вызов в callback, и кажется, лучше, спасибо! – silverfighter

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