回答編集履歴

3 先頭の余計なバッククォートを削除

unau

unau score 2408

2017/09/01 20:51  投稿

`getImage(url) を同期関数にしたいのでしょうか、それとも非同期関数にしたいのでしょうか。
getImage(url) を同期関数にしたいのでしょうか、それとも非同期関数にしたいのでしょうか。
という質問の意味がもしわからないとしたら、Node.js の基本的な仕組みを理解していないものと思われますので、その勉強が必要だと思います。
現在のコードのまま ```getImage(url)``` が呼ばれるとどうなるか、を説明すると、```headers``` が初期化され、```options``` が初期化され、```request()``` が呼ばれて HTTP リクエストが飛んで ```request()``` から戻ってきます。で、```getImage()``` が終了します。ここに明示的な ```return``` がないので、暗黙的な ```return``` が実行されます。
で、HTTP のレスポンスが返ってくると、```request()``` の第 2 引数に指定したコールバック関数が呼ばれます。このコールバック関数の中で ```encImg``` を返していますが、受け取る人はいません。
```getImage()``` を呼び出した側で結果を得られるようにするには、```getImage()``` を「同期化する」か、「非同期のまま動くよう、コールバック関数を引数に取るようにする」かします。推奨されるのは後者でしょうね。
最初に言った、Node.js の基本的な仕組みを理解していない場合、ここで解決策の具体的なコードを示しても意味がないでしょう。
2 表示が崩れるので修正

unau

unau score 2408

2017/09/01 20:50  投稿

```getImage(url)``` を同期関数にしたいのでしょうか、それとも非同期関数にしたいのでしょうか。
`getImage(url) を同期関数にしたいのでしょうか、それとも非同期関数にしたいのでしょうか。
という質問の意味がもしわからないとしたら、Node.js の基本的な仕組みを理解していないものと思われますので、その勉強が必要だと思います。
現在のコードのまま ```getImage(url)``` が呼ばれるとどうなるか、を説明すると、```headers``` が初期化され、```options``` が初期化され、```request()``` が呼ばれて HTTP リクエストが飛んで ```request()``` から戻ってきます。で、```getImage()``` が終了します。ここに明示的な ```return``` がないので、暗黙的な ```return``` が実行されます。
で、HTTP のレスポンスが返ってくると、```request()``` の第 2 引数に指定したコールバック関数が呼ばれます。このコールバック関数の中で ```encImg``` を返していますが、受け取る人はいません。
```getImage()``` を呼び出した側で結果を得られるようにするには、```getImage()``` を「同期化する」か、「非同期のまま動くよう、コールバック関数を引数に取るようにする」かします。推奨されるのは後者でしょうね。
最初に言った、Node.js の基本的な仕組みを理解していない場合、ここで解決策の具体的なコードを示しても意味がないでしょう。
1 曖昧な表現を明確に

unau

unau score 2408

2017/09/01 20:46  投稿

```getImage(url)``` を同期関数にしたいのでしょうか、それとも非同期関数にしたいのでしょうか。
という質問の意味がもしわからないとしたら、Node.js の基本的な仕組みを理解していないものと思われますので、その勉強が必要だと思います。
現在のコードのまま ```getImage(url)``` が呼ばれるとどうなるか、を説明すると、```headers``` が初期化され、```options``` が初期化され、```request()``` が呼ばれて HTTP リクエストが飛んで ```request()``` から戻ってきます。で、```getImage()``` が終了します。ここに明示的な ```return``` がないので、暗黙的な ```return``` が実行されます。
で、HTTP のレスポンスが返ってくると、```request()``` の第 2 引数に指定したコールバック関数が呼ばれます。このコールバック関数の中で ```encImg``` を返していますが、受け取る人はいません。
解決するには、```getImage()``` を同期化するか、非同期のまま動くよう、コールバック関数を引数に取るようにします。推奨されるのは後者でしょうね。
```getImage()``` を呼び出した側で結果を得られるようにするには、```getImage()``` を「同期化する」か、「非同期のまま動くよう、コールバック関数を引数に取るようにする」かします。推奨されるのは後者でしょうね。
最初に言った、Node.js の基本的な仕組みを理解していない場合、ここで解決策の具体的なコードを示しても意味がないでしょう。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る