2017-09-07 5 views
1

URLからJSONオブジェクトを返す関数を作成しようとしています。 それは次のように動作するはずです:私は、次のURLを使用する場合、私は、この方法でそれを使用できるようにNode.js/JavaScriptのURLからJSONオブジェクトを返します。

function getObject(url) { 
    // return undefined when the url or json is invalid 
    return object; 
} 

var object = getObject('http://ip.jsontest.com/'); 
console.log('My IP is: ' + object.ip) 

JSONの例からは、次のようになります。

{"ip": "127.0.0.1"} 

ので、上記のコードは、これをログに記録する必要があります

私のIPがある:127.0.0.1

は、私はすでに要求モジュールでそれを試してみましたが、StackOverflowの上でこの例を見つけました:それは必要がありますが、私が見つけたとして

request.get({ 
    url: 'http://ip.jsontest.com/', 
    json: true, 
    headers: {'User-Agent': 'request'} }, (err, res, data) => { 
    if (err) { 
    console.log('Error:', err) 
    } else if (res.statusCode !== 200) { 
    console.log('Status:', res.statusCode) 
    } else { 
    // data is already parsed as JSON: 
    console.log(data) 
    } 
}) 

データがコンソールに表示されます上記の例のようにそれを使用する方法はありません。 コールバックなしでこれを解決する方法はありますか?私は要求が非同期であることを読んでいますが、私はsynchronusソリューションが必要です。

+0

Node.jsの非同期に実行されます。 PromisesまたはAsync/Awaitを使用できます。 – fdelia

+0

同期ソリューションは必要ありません。約束などの非同期プログラミングパターンを採用する必要はありません。 – trincot

答えて

-1

いいえこれを同期的に行う方法はありません。お使いの環境でサポートされている場合は、fetch apiasync functionを使用して調べることができます。例えば

async function getMyIpAndDoSomething() { 
    const response = await fetch("http://ip.jsontest.com/"); 
    const object = await response.json(); 

    console.log(object.ip); 
} 
+0

約束を使用して同期させることは可能ですが、応答が得られるまで待つことをお勧めします – turmuka

+0

これはすべての非同期値の働きです。あなたは応答を待つ。しかし、同期的にフェッチすることはできません。 – SimpleJ

関連する問題