Как ждать в Node.js - PullRequest
       28

Как ждать в Node.js

8 голосов
/ 16 января 2012

Вот вопрос о том, что я думаю, будет простой шаблон в узле js.

Вот мой пример в coffeescript:

db_is_open = false

db.open ->
  db_is_open = true

wait = ->
wait() until db_is_open

И здесь снова в javascript:

var db_is_open = false;

db.open(function() {
  db_is_open = true;
});

function wait() {};
while (not db_is_open) { wait()};

Это не работает вообще, потому что цикл while никогда не освобождает управление, что, я думаю, имеет смысл.Однако как я могу сказать функции ожидания попробовать следующий обратный вызов в очереди?

Ответы [ 2 ]

4 голосов
/ 17 января 2012

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

var async = require('async');

async.series([
  function(next){
    db.open(next)
  }
, function(next){
    db.loadSite('siteName', next)
  }
], function(err){
  if(err) console.log(err)
  else {
    // Waits for defined functions to finish
    console.log('Database connected')
  }
})
2 голосов
/ 16 января 2012

Почему вы ждете, а не просто используете обратный вызов, который выполняется внутри функции, переданной в db.open? Это в значительной степени идиоматический код узла:

db.open(function() {
  // db is now open, let's run some more code
  execute_db_query();
});

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

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