2016-04-15 5 views
4

Что делает строка кода ниже?Что на самом деле делают волокна/будущее?

Npm.require('fibers/future'); 

Я смотрел онлайн для примеров, и я наткнулся на несколько, как это:

Future = Npm.require('fibers/future'); 
var accessToken = new Future(); 

Что accessToken переменная будет в этом случае?

+1

Это все обратные вызовы и посылов. Он позволяет запускать асинхронный код синхронно. – Molda

ответ

6

Вопрос немного старый, но мои 2 цента:

Как сказал Molda в комментарии, основная цель Будущего том, чтобы сделать вещи работают асинхронные синхронно. future экземпляр поставляется с 3-мя способами:

  • future.wait() в основном говорит ваш поток в основном паузу, пока не сказал, чтобы возобновить.
  • future.return(value), первый способ рассказать ожидание future он может возобновить, он также очень полезен, так как он возвращает значение ожидания, которое затем может быть присвоено, следовательно, строки, такие как , где ret будет возвращенным вами значением после возобновления.
  • future.throw(error), совершенно явный, делает вашу линию блокировки с заданной ошибкой.

Создание синхронных событий в javascript может показаться немного тревожным, но иногда полезно. В Meteor это очень полезно, когда вы связываете асинхронные вызовы в Meteor.method и хотите, чтобы его результат был возвращен клиенту. Вы также можете использовать Promises, которые теперь полностью поддерживаются Meteor. Я использовал оба, и это работает, это по вашему вкусу.

Быстрый пример:

Meteor.methods({ 
    foo: function() { 
    const future = new Future(); 
    someAsyncCall(foo, function bar(error, result) { 
     if (error) future.throw(error); 
     future.return(result); 
    }); 
    // Execution is paused until callback arrives 
    const ret = future.wait(); // Wait on future not Future 
    return ret; 
    } 
}); 
Смежные вопросы