我正在尝试使用冰咖啡脚本重写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
但是,主体似乎没有返回(它是未定义的)。如何才能使此代码生效?
答案 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)