1

request.get('http://someurl/file.json', function(err, response, body) {})の本体を変数にどのように割り当てますか?

例えば:

ファイル.json

{
    "Name1": {
        "prop": "value"
    },
    "Name2": {
        "prop": "value"
    }
}

app.js

var json = request.get(http://localhost/file.json);
json = JSON.parse(json);

console.log(json["Name1"].prop);

前もって感謝します :)

4

2 に答える 2

1
var myvariable1;

request.get('http://someurl/file.json', function(err, response, body) {
    myvariable1=response.Name1.prop;
})

コールバックが完了するまで、本文は使用できません。あなたが望むものを可能にするコールバックの省略形はないと思います。ただし、promise の省略形があります。bluebird npm モジュールを使用して、これを試して約束することができます。その後、次のことができます... myvar = request.get('path'); .... myvar には、解決された promise の結果が含まれます (前ではありません)。

これを約束するためにqライブラリのようなものを使用することもできます(デフォルトでNodeにあると思います)。

function getMyData() {
    var def=q.defer();
    request.get('http://someurl/file.json', function(err, response, body) {
        def.resolve(response.Name1.prop);
    })
    return def.promise();
}

// myvar will have the result of the resolution on resolution (not before)
var myvar = getMyData();

// to test this approach you might want to use a settimeout to repeatedly dump the value of myvar every X ms.
// Again this approach deffo works in Angular and hopefully works in Node too.

これが機能しない場合の最悪のシナリオは、次の手段に頼ることができます...

var myvar;
getMyData().then(function(data) {
  myvar = data;
));

それはあなたが始めたところにちょっと戻ってきます笑:)

PS私は簡単にするためにプロミスCATCHブロックでエラー処理を無視しました

于 2016-01-15T10:44:17.317 に答える
0

JavaScript には JSON オブジェクトはありません。あなたができることは、このようにデータを配列に解析することです

var json = request.get(http://localhost/file.json);
var parsed = JSON.parse(json);
var arr = [];

for(var i in parsed){
    arr.push(parsed[i]);
}
于 2016-01-15T10:47:55.723 に答える