【发布时间】:2014-12-22 02:42:12
【问题描述】:
我有一些用 LiveScript(Coffeescript 的分支)编写的代码,它将使用请求模块发出请求,然后将响应的 statusCode 传递给回调。
url = 'http://www.google.ca'
logCode = (statusCode) ->
console.log statusCode
makeRequest = (url, callback) ->
request url, (err, response, body) ->
if body
callback response.statusCode
else
console.log "No response"
makeRequest url, logCode
这按预期工作,成功触发回调并将“200”记录到控制台。
但是,我想让我的代码尽可能干净,并去掉所有嵌套的回调。因此,我定义了一个函数作为我的请求回调,并将其作为请求的第二个参数传入。
url = 'http://www.google.ca'
requestCallback = (err, response, body) ->
if body
callback response.statusCode
else
console.log "No response"
logCode = (statusCode) ->
console.log statusCode
makeRequest = (url, callback) ->
request url, requestCallback
makeRequest url, logCode
但是,运行它当然会返回一个错误,指出未定义回调。这当然是完全有道理的,因为在 requestCallback 操作的范围内,没有名为 callback 的函数,它无法访问 makeRequest 中定义的回调。
根据我的阅读,我可以在匿名函数中声明 requestCallback,这将允许将回调传递给它。我已经尝试过这是我能想到的所有方法,但没有结果。
此外,似乎可以选择将 requestCallback 绑定到 makeRequest 的范围,但是尽管我尽了最大的努力和争论,但我今天也无法做到这一点。
如何让 requestCallback 知道传递给 makeRequest 的回调函数?
【问题讨论】:
标签: javascript callback closures