2013-08-22 53 views
0

我試圖用冰咖啡腳本重寫一個hubot腳本。這是我原來的規則(熱?)的CoffeeScript代碼:如何使用帶冰咖啡腳本的ScopedClient

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

注意msg.http()正在調用的作用域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

因爲你的代碼是異步的。到「主體」返回給調用者時,它不會被初始化或分配。你可以嘗試發送一個句柄作爲第三個參數異步運行。而不是返回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) 
1

你可以試試這個:

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