2014-09-19 3 views
0

Я пытаюсь использовать sonos (https://www.npmjs.org/package/sonos), чтобы вернуть массив игроков, которые у меня есть в моей сети. Я хотел бы использовать функцию sonos.search, чтобы найти игроков для меня при запуске, а затем обновить массив новыми игроками, если они подключены к сети.Запуск функции блокировки при запуске Nodejs

Поскольку sonos.search является асинхронным, остальная часть кода будет выполняться до того, как все игроки будут добавлены в массив при запуске. Как я могу заблокировать код для запуска sonos.search один раз в течение 10 секунд при запуске, создавая массив игроков, который находится в сети, а затем перебирает/ищет новых игроков и добавляет к массиву, если он подключен?

-

ответ

0

Вы можете попробовать:

https://github.com/luciotato/waitfor

сделать синхронизации вызова. Он работает с волокнами и имеет много способов «подождать» для чего-то.

EDIT: немного пример использования его если вы используете mongoskin для доступа к данным

var wait =require('wait.for'); 

wait.launchFiber(function(){ 
    var obj = getAsyncData(); 
}); 

function getAsyncData(){ 
    return wait.forMethod(db.collection('data'), 'find'); 
} 

И я думаю, что рамки MeteorJS использовать эту библиотеку для обработки синхронизации функций.

2

Попытка избежать асинхронного поведения nodejs, как правило, не является наилучшим подходом к проблеме.

Если вы хотите, чтобы остальная часть вашего кода выполнялась после того, как sonos загрузил игроков, он должен быть вызван из обратного вызова асинхронной функции.

Если вы действительно хотите подождать 10 секунд, прежде чем запускать остальную часть своего кода, вы можете использовать функцию setTimeout().

setTimeout(function() { 
    codeToBeExecutedAfter10Secs(); 
}, 10000); 

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

  • Нет связанных вопросов^_^