繁体   English   中英

具有请求范围的coffeescript

[英]coffeescript with Request scoping

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的代码更新做到了! 非常感谢 :) !

您正在尝试输出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)

请求函数完成后,它将触发一个回调,这是您可以可靠访问“ 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编辑---好的,根据您的要求,以下示例经过修改,可以正常工作。

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM