0

我正在尝试使用冰咖啡脚本重写 hubot 脚本。这是我原来的常规(热门?)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

但是,主体似乎没有被返回(它是未定义的)。我怎样才能让这个代码工作?

4

2 回答 2

1

你可以试试这个:

getHostAwait = (msg, artifact) ->
  url = "http://myapi.org/api/hosts-for/artifact/#{artifact}"
  await msg.http(url)
    .get(), defer err, res, body
  yourCallBack body
于 2013-09-16T09:45:02.023 回答
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)
于 2013-08-22T16:02:18.077 回答