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)
然后上面是带有Node.js请求模块的Coffeescript。我无法弄清楚如何获取请求函数内的数据。这是我申请的主要障碍。
谢谢!
**编辑**
Vadim Baryshev用代码更新了它!非常感谢你:)!
答案 0 :(得分:1)
您试图在exports.inside
函数回调中分配之前输出request
。因为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)
答案 1 :(得分: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 EDIT --- 好的,根据您的要求,这是您修改的示例,以便它可以正常工作。
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)
请注意,正如现在多次描述的那样,您无法在回调之外访问请求的结果,因为您无法知道请求何时完成。