Node.js 带有请求范围的coffeescript

Node.js 带有请求范围的coffeescript,node.js,coffeescript,Node.js,Coffeescript,上面是带有Node.js请求模块的Coffeescript。我不知道如何获取请求函数内部的数据。这一直是我申请的主要障碍 谢谢大家! **编辑** 瓦迪姆·巴雷舍夫的代码更新成功了!非常感谢:) 在请求中指定函数回调之前,您正在尝试输出exports.in。因为请求函数是异步的。您可以通过回调或事件获取此函数的结果 更新: request = require('request') auth = url: '' method: 'POST' json: credentials: user


上面是带有Node.js请求模块的Coffeescript。我不知道如何获取请求函数内部的数据。这一直是我申请的主要障碍

谢谢大家!

**编辑**


瓦迪姆·巴雷舍夫的代码更新成功了!非常感谢:)

请求中指定
函数回调之前,您正在尝试输出
exports.in
。因为
请求
函数是异步的。您可以通过回调或事件获取此函数的结果

更新

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)

请求
函数回调中分配
之前,您正在尝试输出
exports.in
。因为
请求
函数是异步的。您可以通过回调或事件获取此函数的结果

更新

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)

一旦请求函数完成,它就会触发回调,这是唯一可以可靠访问“body”值的地方

您遇到的问题是,当console.log函数运行时,由于请求未完成,因此没有触发回调

有关异步编程环境中程序流的更有力描述,请参阅

---编辑---举例说明:

考虑这一点:

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,2,3,6,…4,5,其中,由于磁盘i/o的性质,省略号表示未知的时间量

由于读取操作需要一些时间才能完成,而不是等待其结果,因此我们提供了一个回调函数,该函数将在将来读取文件内容时的某个不可预测点被调用,因此可以分配给“result”

当程序流到达第6行时,由于文件读取操作尚未完成,因此未调用回调,因此未设置结果

这就是异步编程的本质,在异步编程中,我们可以将浪费的时间用于其他目的,而不是等待操作完成后再继续

---第二版--- 好的,根据您的请求,这里是您的示例,经过修改后可以正常工作

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

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

一旦请求函数完成,它将触发回调,这是您唯一可以可靠访问“body”值的地方

您遇到的问题是,当console.log函数运行时,由于请求未完成,因此没有触发回调

有关异步编程环境中程序流的更有力描述,请参阅

---编辑---举例说明:

考虑这一点:

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,2,3,6,…4,5,其中,由于磁盘i/o的性质,省略号表示未知的时间量

由于读取操作需要一些时间才能完成,而不是等待其结果,因此我们提供了一个回调函数,该函数将在将来读取文件内容时的某个不可预测点被调用,因此可以分配给“result”

当程序流到达第6行时,由于文件读取操作尚未完成,因此未调用回调,因此未设置结果

这就是异步编程的本质,在异步编程中,我们可以将浪费的时间用于其他目的,而不是等待操作完成后再继续

---第二版--- 好的,根据您的请求,这里是您的示例,经过修改后可以正常工作

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

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

您有没有示例,以便我更好地理解。我对JS/CS还很陌生。我仍然在用上面的例子做回调。。。。。。异步并不容易。我们非常欢迎您的任何帮助。:)我仍在与这个问题作斗争,并试图让CoffeeScript/请求回拨正常工作。任何和所有的帮助都是很好的。:)你有没有举个例子,让我更好地理解。我对JS/CS还很陌生。我仍然在用上面的例子做回调。。。。。。异步并不容易。我们非常欢迎您的任何帮助。:)我仍在与这个问题作斗争,并试图让CoffeeScript/请求回拨正常工作。任何和所有的帮助都是很好的。:)这是有道理的,但对我来说,水越来越脏了。是时候好好举出例子来了,我知道问题出在哪里,但你有没有办法用我的例子来说明有效的解决方案……我对此感到困惑。非常感谢。这是有道理的,但对我来说,水越来越脏了。是时候好好举出例子来了,我知道问题出在哪里,但你有没有办法用我的例子来说明有效的解决方案……我对此感到困惑。非常感谢。