coffeescript请求范围

时间:2012-11-03 15:49:33

标签: node.js coffeescript

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用代码更新了它!非常感谢你:)!

2 个答案:

答案 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)

请注意,正如现在多次描述的那样,您无法在回调之外访问请求的结果,因为您无法知道请求何时完成。

相关问题