Добавьте flow.add () (материал модуля asyncblok) внутри обратных вызовов на Node.JS - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь контролировать свой поток кода с помощью модуля Node.JS, который называется asyncblock, он использует волокна. Я думаю, что у меня есть некоторый недостаток, чтобы понять это поведение, этот код ниже не работает, поток не ждет ..

person.save(function(err){
    if(err) throw err;
    flow.add('goOn');
});
flow.wait('goOn');

Но это хорошо работает:

person.save(flow.add('goOn'));
flow.wait('goOn');

Что я делаю не так?

Это полный код: http://pastebin.com/UCsqPNiF

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Вот почему ваш пример не работает:

Первая операция асинхронная, поэтому первое, что выполняется, - это вызов flow.wait.Поскольку flow.add еще не был вызван, он на самом деле не ждет.

Обратите внимание, что ваш работающий пример - правильный способ использования asyncblock.Я работаю над изменением асинхронного блока, которое сделает более естественным асинхронное добавление задач, но в этом примере это не требуется.

0 голосов
/ 23 декабря 2011

Не могу сказать, что раньше использовал asyncblock, но похоже, что add () возвращает обратный вызов, который вам нужно будет выполнить.

person.save(function(err){
  if(err) throw err;
  flow.add('goOn')(); // Execute the callback!
});
flow.wait(); // wait() takes no arguments.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...