2016-06-14 6 views
0

私はこのメソッドをgetFormattedURI(uri)と呼びます。このメソッドは、URIを受け取り、Webサイトやクエリの名前のような内容を解析します。このメソッドは、リクエストをURIに送信し、レスポンスを使用して処理を行います。ただし、次のコードでそのメソッドの戻り値を使用するため、getFormattedURI(uri)の後のすべてのコードをそのメソッドが完了するまで待つ必要があります。私は私のコードは、私がリクエストからレスポンスを取得するまで待って、すぐに関数呼び出しを越えて行かないしたいプログラムを続行する前に、応答を待つ方法はありますか? (Elasticsearchを使用したNodej)

function getFormattedURI(uri) { 
    request.get(uri).end((err, res) => { 
     //(using superagent request) do stuff with res and return parsed uri 
    }); 
} 

... 
let x = getFormattedURI('www.google.com'); 
//do stuff with x like index it into Elasticsearch 

:それはこのようなものです。これをどのように達成するのですか?

+1

Node.jsのdoesnのをこのための同期メソッドは公開されていません。それは本当に必要なことではありません。コールバックにコードを入れてみてはどうですか? – 4castle

+0

ちょうど4castleのように、あなたはコールバックに物を入れることができると示唆しました。もし絶対に必要ならば、async:falseオプションを使用することができます。http://api.jquery.com/jquery.ajax/ – olexity

答えて

1

JSスレッドをブロック(同期)することは非常に悪い習慣と考えられ、あなたのケースは非常に簡単で、コールバックを使用するのは簡単です。

、あなたは空想取得したい場合、あなたは約束使っ約束(JSエンジンのサポートの約束を提供し、またはサードパーティのライブラリを使用する必要があります)

サンプルを使用することができます。

function getFormattedURI() { 
    return new Promise(function(resolve, reject) { 
     request.get(uri).end((err, res) => { 
      //(using superagent request) do stuff with res and return parsed uri 
      resolve(res); 
     }); 
    }); 
} 


getFormattedURI('www.google.com').then(function(res) { 

}) 
+0

まもなく私はすぐに考えていました私は質問を見た! –

関連する問題