request 関数が完了すると、"body" の値に確実にアクセスできる唯一の場所であるコールバックがトリガーされます。
あなたが抱えている問題は、console.log 関数が実行されたときに、リクエストが完了していないためにコールバックが起動されていないことです。
非同期プログラミング環境内のプログラム フローのより説得力のある説明については、nodejs での fs.stat の使用に関する問題を参照してください。
---編集--- 例:
このことを考慮:
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 EDIT--- OK、あなたのリクエストに応じて、動作するように変更された例を次に示します。
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)
何度か説明したように、リクエストがいつ完了するかを知ることができないため、コールバックの外でリクエストの結果にアクセスできないことに注意してください。