1
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 の更新により、それが実現しました。どうもありがとう :) !

4

2 に答える 2

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)
于 2012-11-03T16:37:25.887 に答える
0

request 関数が完了すると、"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 EDIT--- OK、あなたのリクエストに応じて、動作するように変更された例を次に示します。

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)

何度か説明したように、リクエストがいつ完了するかを知ることができないため、コールバックの外でリクエストの結果にアクセスできないことに注意してください。

于 2012-11-03T16:39:16.463 に答える