2012-11-03 17 views
1
request = require('request') 

auth = 
url: '' 
method: 'POST' 
json: 
    credentials: 
    username: "" 
    key: "" 

exports = exports ? this 

request auth, (err, res, body) -> 
    exports.inside = body 

console.log(exports.inside) 


CoffeeScript的與請求作用域

然後以上的CoffeeScript與Node.js的請求模塊我無法弄清楚如何獲取請求函數中的數據。這一直是我申請的主要障礙。

謝謝!

**編輯**

瓦迪姆Baryshev與代碼更新做到了!非常感謝 :) !

回答

1

request函數回調中,您正試圖輸出exports.inside。因爲request功能是異步的。您可以通過回調或事件獲得此功能的結果。

更新

request = require('request') 

exports = exports ? this 

getAuth = (callback) -> 
    auth = 
    url: '' 
    method: 'POST' 
    json: 
    credentials: 
     username: "" 
     key: "" 

    request auth, (err, res, body) -> 
    exports.inside = body 
    callback err, body 

getAuth (err, body) -> 
    # here is exports.inside ready 
    console.log exports.inside 
    # also you can access body and request error arguments here 
    # body === exports.inside here 
    # err is request error (is null/undifined if request is successful) 
+0

你有一個例子,所以我可以更好地理解。我對JS/CS非常陌生。 –

+0

我仍然在試圖用我上面的示例進行回調的牆上跳動我的頭......異步並不容易。任何和所有的幫助很大程度上受到歡迎。 :) –

+0

我仍然在處理這個問題,並試圖讓CoffeeScript/Request回調工作。任何和所有的幫助是偉大的。 :) –

0

一旦請求函數完成,它會觸發一個回調是在這裏您可以可靠地訪問的唯一有價值的地方「的身體。」

您遇到的問題是,當console.log函數運行時,由於請求未完成,回調未被觸發。

請參閱Problems with use fs.stat in nodejs瞭解異步編程環境中程序流程的更有說服力的描述。

---編輯---有例如:

考慮一下:

1: path='/tmp/file.txt' 
2: result='' 
3: fs.readFile path, (err,data) -> 
4: throw err if err 
5: result=data 
6: console.log result 

如果我們追溯這一操作,我們會發現,執行的順序是1,2, 3,6,... 4,5,其中,由於光盤I/O的性質,省略號表示未知的時間量。

因爲讀取操作需要一些時間才能完成,而不是等待結果,所以我們提供了一個回調函數,在將來讀取文件內容時將會在某個不可預知的時刻調用該函數。可以分配給'結果'。

當程序流到達第6行時,由於文件讀取操作尚未完成,所以尚未調用回調,因此結果尚未設置。

這是異步編程的本質,而不是在等待操作完成之前完成,我們可以將浪費的時間用於其他目的。

--- 2ND編輯--- 好的,根據您的要求,這裏是您的示例修改,以便它的工作原理。

request = require('request') 

auth = 
    url: '' 
    method: 'POST' 
    json: 
    credentials: 
    username: "" 
    key: "" 

exports = exports ? this 

request auth, (err, res, body) -> 
    exports.inside = body 
    console.log(exports.inside) 

注意,已經描述了幾次,你不能訪問請求的結果之外的回調,因爲你不知道能當請求將完成。

+0

這確實有道理,但更多地爲我混淆了水。時間好的例子,打敗我的頭... –

+0

我明白什麼是問題,但有沒有辦法可以用我的例子顯示工作解決方案.....我對此感到茫然。謝謝! –