一旦請求函數完成,它會觸發一個回調是在這裏您可以可靠地訪問的唯一有價值的地方「的身體。」
您遇到的問題是,當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)
注意,已經描述了幾次,你不能訪問請求的結果之外的回調,因爲你不知道能當請求將完成。
你有一個例子,所以我可以更好地理解。我對JS/CS非常陌生。 –
我仍然在試圖用我上面的示例進行回調的牆上跳動我的頭......異步並不容易。任何和所有的幫助很大程度上受到歡迎。 :) –
我仍然在處理這個問題,並試圖讓CoffeeScript/Request回調工作。任何和所有的幫助是偉大的。 :) –