如何在Iced CoffeeScript中使用ScopedClient

时间:2013-08-22 08:36:36

标签: iced-coffeescript

我正在尝试使用冰咖啡脚本重写hubot脚本。这是我原来的常规(hot?)CoffeeScript代码:

getHost = (msg, artifact, cb) ->
  url = "http://myapi.org/api/hosts-for/artifact/#{artifact}"
  msg.http(url)
    .get() (err, res, body) ->
      cb(body)

请注意,msg.http()正在调用Scoped http客户端,您可以在此处找到:https://github.com/technoweenie/node-scoped-http-client

我想将此转换为不使用回调但等待api响应并返回它的函数。以下是我将上述内容转换为ICS的尝试:

getHostAwait = (msg, artifact) ->
  url = "http://myapi.org/api/hosts-for/artifact/#{artifact}"
  await msg.http(url)
    .get() (err, res, body) ->
      defer(body)
  body

但是,主体似乎没有返回(它是未定义的)。如何才能使此代码生效?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

getHostAwait = (msg, artifact) ->
  url = "http://myapi.org/api/hosts-for/artifact/#{artifact}"
  await msg.http(url)
    .get(), defer err, res, body
  yourCallBack body

答案 1 :(得分:0)

因为您的代码是异步的。当它“body”返回给调用者时,它不会被初始化或分配。您可以尝试发送句柄作为第三个参数以异步方式运行。喜欢而不是返回boby发送一个名为“myFunction”的函数,它可以执行异步。

getHostAwait = (msg, artifact, myFunction) ->
  url = "http://myapi.org/api/hosts-for/artifact/#{artifact}"
  await msg.http(url)
    .get() (err, res, body) ->
      myFunction(body)