【问题标题】:How to use ScopedClient with Iced CoffeeScript如何将 ScopedClient 与 Iced CoffeeScript 一起使用
【发布时间】:2013-08-24 21:15:17
【问题描述】:

我正在尝试使用冰咖啡脚本重写 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

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

【问题讨论】:

    标签: iced-coffeescript


    【解决方案1】:

    你可以试试这个:

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

    【讨论】:

      【解决方案2】:

      因为您的代码是异步的。当它“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)
      

      【讨论】:

        猜你喜欢
        • 2014-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 2013-11-28
        • 2012-11-12
        • 2011-10-14
        相关资源
        最近更新 更多