如何将回调作为变量传递给预定义的回调

安东尼

我有一些用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的回调函数?

太平

不知道如何在LiveScript中编写它,但是在JavaScript中:

function makeRequest(url, callback) {
    request(url, function (err, response, body) {
        requestCallback(err, response, body, callback);
    });
}

因此,基本上,您通过另一个参数传递给request调用的回调requestCallback

如果您正在做很多异步工作,那么值得研究一下Promises他们真的可以帮助避免意大利面条。

使用Promises,您可以执行以下操作:

makeRequest(url).done(function (response, body) {
    if (body) {
        logCode(response.statusCode)
    } else {
        console.log("No response");
    }
}).fail(function (response) {
    throw new Error("uhoh!");
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Node.js中将变量传递给预定义的回调函数

如何将在原型上定义的方法作为回调传递给Array.map

如何将回调作为参数传递给另一个函数

如何将变量传递给嵌套的回调函数

Scala-如何将回调传递给方法

如何将回调函数传递给子组件?

如何将回调函数传递给父级

如何将回调函数传递给返回多行的aggregate()?

如何将回调传递给孩子而不触发它

我如何将回调结果传递给变量并自由访问var

如何将方法(作为回调)作为参数传递给方法?

如何将回调传递给传递给“ vo”库的生成器?

将回调函数作为道具传递给孩子

如何将ReactJS函数作为回调传递给外部JS函数?

如何将方法作为回调/处理程序参数传递给函数?

如何将内部函数值作为参数传递给其回调

如何将指针/数组作为参数传递给 GTK 回调函数?

Ember将回调传递给服务-未定义此

Node.JS:如何将变量传递给异步回调?

如何将变量传递给Page Method Success回调函数

如何将值传递给没有全局变量的匿名化回调?

如何将变量从回调函数传递给函数调用?

JavaScript:如何将额外的参数传递给回调

如何将道具回调传递给路线?

如何将onDrop回调传递给ImageInput

如何将参数传递给Erlang中的回调?

如何将参数传递给setTimeout()回调?

如何将参数传递给回调函数内部

如何将参数传递给匿名回调函数?