Node.js:确保一段代码一个接一个地执行

时间:2012-02-08 19:58:21

标签: javascript node.js coffeescript

鉴于此代码:

 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 个答案:

答案 0 :(得分:4)

据推测,您的entry方法会执行异步操作,并且某些内容应该具有在完成时运行的回调。因此,只需向entry添加回调:

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

我不知道some_async_call回调的论据是什么,或者你想要传递给entry的回调是什么,所以我使用arg, ...和{ {1}}作为说明性占位符。如果other_arg, ...some_async_call回调的参数相同,那么您可以(在评论中注明为Aaron Dufour)只说:

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到底是什么。

任何时候你需要等待异步(Java | Coffee)脚本中发生的事情,你几乎总是通过添加回调来解决问题。