Node.js: убедитесь, что часть кода выполняется после другого - PullRequest
2 голосов
/ 08 февраля 2012

Учитывая этот код:

 c = new Customer 
 c.entry phone,req #how to make sure it ends before the next piece of code?

 db.Entry.findOne {x: req.body.x}, (err,entry) ->

Как мне убедиться, что db.Entry.findOne выполняется только после завершения c.entry?

class Customer
  entry: (phone,req) ->

1 Ответ

4 голосов
/ 09 февраля 2012

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

class Customer
  entry: (phone, req, callback = ->) ->
    some_async_call phone, req, (arg, ...) -> callback(other_arg, ...)

Я не знаю, каковы аргументы для обратного вызова some_async_call или что вы хотите передать entry.обратный вызов, поэтому я использую arg, ... и other_arg, ... в качестве иллюстративных заполнителей.Если аргументы для some_async_call и entry обратного вызова были одинаковыми, то вы могли бы (как отметили Аарон Дюфур в комментариях) просто сказать:

entry: (phone, req, callback = ->) ->
  some_async_call phone, req, callback

И затем переместитьdb.Entry.findOne вызов в обратный вызов таким образом:

c = new Customer 
c.entry phone, req, -> 
  db.Entry.findOne {x: req.body.x}, (err, entry) ->

Детали внутри entry и аргументы обратного вызова, конечно, будут зависеть от того, что делает entry и что на самом деле является some_async_call.1026 *

Каждый раз, когда вам нужно подождать, пока что-нибудь произойдет в асинхронном (Java | Coffee) скрипте, вы почти всегда решаете проблему, добавляя обратный вызов.

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