2017-03-29 7 views
0
var request = require('request'); 

var options = { 
    url: 'https://api.github.com/repos/request/request', 
    headers: { 
    'User-Agent': 'request' 
    } 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
    var info = JSON.parse(body); 
    console.log(info.stargazers_count + " Stars"); 
    console.log(info.forks_count + " Forks"); 
    } 
} 
exports.parse = function(){ 
    request(options, callback); 
} 

こんにちは、info変数はcallbackの内部にあります。 申し訳ありません、私はjsの初心者で、私の脳/平和の中で答えを見つけませんでした。コールバック関数内に変数を取得する

+0

あなたは他の変数はなぜ 'request'カスタムコールバックを受け入れていない場合は、ことを使用する必要がある場合は? – user2896976

+0

今複製を見つけることができません。誰かがこれを正しい重複で閉じてください – slebetman

+0

@ user2896976この実装はコードをローカライズしています:) –

答えて

2

https://github.com/expressjs/body-parserから):標準パターン...例えば、このコードを考えてみましょうです。ジョブがI/Oをブロックしているときには、単にジョブをキューに入れて前に移動します。タスクが終了したら、コールバック関数をトリガする時間です。返された値は、任意の方法で処理できます。これがコールバック関数の使用です。イベントループについて理解を深めるために読むことができます。

シナリオを正しく処理するには、カスタムコールバック関数を渡す必要があります。あなたは、このような解析方法の使用を使用する代わりに

var request = require('request'); 

var options = { 
    url: 'https://api.github.com/repos/request/request', 
    headers: { 
    'User-Agent': 'request' 
    } 
}; 

exports.parse = function(cb){ 
    request(options, cb); 
} 

..

parse(function(error, response, body) { 
    if (!error && response.statusCode == 200) { 
    var info = JSON.parse(body); 
    console.log(info.stargazers_count + " Stars"); 
    console.log(info.forks_count + " Forks"); 

// TODO with info 

    } 
}); 
0

より高いスコープで変数を宣言すると、その変数にアクセスできるようになります。高いスコープの値は、コールバックが呼び出されるまで更新されません。

var result = {}; 
function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     result.info = JSON.parse(body); 
     console.log(result.info.stargazers_count + " Stars"); 
     console.log(result.info.forks_count + " Forks"); 
    } 
} 
+0

このメソッドは私が結果を解析関数で呼び出すと空の結果オブジェクトを返します。 –

+1

コールバックが発生するまで、結果オブジェクトは空です。すべてのロジックは、コールバック関数内に含まれている必要があります。結果が得られたときに結果を処理する方法をよりよく制御したい場合は、約束を使用することもできます。 – Weijian

0

あなたの目標はあなたの体が解析されており、容易に解析されたJSONを利用できる持っているだけであるならば、あなたは、このようなボディパーサーとしてのミドルウェアを使用して検討すべきです。非同期の性質 - コールバック関数は、非ブロッキングを処理するために使用されている

var express = require('express') 
var bodyParser = require('body-parser') 

var app = express() 

// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false })) 

// parse application/json 
app.use(bodyParser.json()) 

app.use(function (req, res) { 
    res.setHeader('Content-Type', 'text/plain') 
    res.write('you posted:\n') 
    res.end(JSON.stringify(req.body, null, 2)) 
}) 
+0

thx、ただし、いいえ。 info変数は 'var info = parseInformation(body);'と同じになります。 –

関連する問題