例如,请使用以下代码:
getThing = (thing_id, cb_success, cb_error) ->
model.findById thing_id,
(error, thing) ->
if error || !thing
cb_error "error"
else
cb_success thing
然后调用函数
getThing thing_id
, (thing) ->
console.log "Found a thing!"
, (error)
console.log" Uh oh..."
如果我传递了多个回调,但没有一个回调可以保证被调用,我怎样才能构造等待/延迟这种情况呢?或者我是否需要完全重新考虑我的代码以仅提供一个回调,然后评估其中是否存在错误?
答案 0 :(得分:0)
你可以调用一个中间函数,比如从两个函数中完成,然后在await / defer块中调用这个新的包装函数。
答案 1 :(得分:0)
Iced CoffeeScript期望它用作延续的单个回调。在某些情况下,使用像你习惯的回调更有意义。
如果一次总是调用一个回调,请合并它们并使用await
。
如果回调可能被调用为零次或多次,请不要使用await
- 而是传递回调函数。
例如,Node.js的异步filesystem API是await
的绝佳候选者,因为在继续之前需要它返回一个值:
await fs.stat somePath, defer(err, stats)
...但是一个HTTP服务器,其回调可能被多次调用,必须是正常的回调:
http.createServer (req, res) ->
# handle the request
在您的情况下,如果您要使用Iced CoffeeScript,则重构更有意义,以便您的方法只需一次回调。