一旦请求函数完成,它会触发一个回调,这是唯一可以可靠访问“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行时,由于文件读取操作尚未完成,因此尚未调用回调,因此尚未设置结果。
这是异步编程的本质,我们可以将浪费的时间用于其他目的,而不是等待操作完成后再继续。
---第二次编辑---好的,根据您的要求,这是您修改的示例,以便它可以工作。
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)
请注意,正如现在已经多次描述的那样,您无法在回调之外访问请求的结果,因为您无法知道请求何时完成。