鉴于此代码:
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) ->
答案 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)脚本中发生的事情,你几乎总是通过添加回调来解决问题。