2016-09-04 6 views
0

機能ならば、私は今NodeJS機能return文

if (shorturl) { 
... 
    link.shorten({longUrl:"http://google.com"}, function(err, results) { 
     return results; 
    }); 
return results; 
} 

、これを持って、私は「結果」の値を受け取るための第2のreturn文をしたいです。むしろ、私は "ReferenceError:結果は定義されていません"と表示されます。

返品/コールバックのネストを手伝ってください。

参考:
私はあなたが二return results;行でエラーが出ると仮定SHORTURL

+0

「結果」のスコープはコールバック関数内に限定されます。外に出ることはできません。 – thefourtheye

+0

私はエラーの理由を知っています。私はそれを外部にアクセスする方法を知りたいですか?ありがとう。 – crlf

答えて

0

を取得するために、関数内http://github.com/nkirby/node-bitlyapiを使用しようとしています。

これは非同期コード(コールバックを使用して後でコードの一部を実行する)のように見えるので、値を返すだけではなく、同じ実行フレームで利用できると期待できます。

あなたのケースを処理する最善の方法は、おそらくコールバック自体の内部で残りのコードを実行することです。

0

link.shortenは非同期でコールバック関数を提供しているので、これはできません。 link.shorten関数の呼び出しがまだ返されていないため、2番目の戻り値が評価された時点で結果は未定義です。

コールバックを待ってから結果を返すか、約束を使用して結果を約束してください。 (ノードにはいくつかの異なる約束ライブラリがあります)。

https://howtonode.org/promises

+0

ありがとう。あなたが「コールバックを待つ」と言ったら、それはどういう意味ですか?私は最初の結果に正しい答えを持っています。さて、どうすればlink.shortenの範囲外に移動できますか? – crlf

+0

結果が得られた時点で2回目のリターンを実行しているので、この操作はできません。それに応じてコードを計画する必要があります。コールバックを使用して結果を非同期的に返すか、結果自体ではなく関数から約束を返します。あなたがコーリングコードを投稿すると、私はもっと助けることができるかもしれません。 – Nitzo

+0

私は短くするために関数内でhttps://github.com/nkirby/node-bitlyapiを使用しようとしています。 – crlf