質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1093閲覧

メインの関数の引数に渡す別の関数をメインの関数でリターンした後に実行するには?

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/10/10 08:30

const func = () => { console.log('何らかの処理を実行') } const returnSomething = (value, callback) => { callback(); return value; } returnSomething(5, func)

例えば、こんなコードがあるとします。

const returnSomething = (value, callback) => { callback(); return value; }

このコードですと、callback()の部分がreturn valueの前に実行されてしまいますが、これをreturn valueの後に実行させるなんてことは出来ないのでしょうか?

return したらその後は実行されないというのは分かってはいるのですが、何かそれっぽいことを実現する方法はあるのかなと思いまして。。。

普通に、

returnSomething(1); func();

とするしかないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

コールバックというからには非同期に実行されることを想定していると思うので、setImmediateで非同期に実行すれば、コールバックの実行よりも前に返り値が得られます。

lang

1const returnSomething = (value, callback) => { 2 setImmediate(() => { 3 console.log('running callback asynchronously') 4 callback() 5 }) 6 return value 7} 8 9const returned = returnSomething(3, () => { console.log("im a callback") }) 10console.log("return value: " + returned)

出力はこうなります。

return value: 3 running callback asynchronously im a callback

投稿2017/10/10 08:52

karamarimo

総合スコア2551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/10 09:02

おー!!ありがとうございます!関数内で更にsetimmediateやsettimeoutとかでラップしてあげれば良いのですね。前者がこのケースみたいなのでは推薦されてるやつだったとは思いますが。
退会済みユーザー

退会済みユーザー

2017/10/10 09:51

const returnSomething = (value, callback) => { callback() return value } const callMeLater = () => { setImmediate(() => { console.log("im a callback") }) }; const returned = returnSomething(3, callMeLater) console.log("return value: " + returned)
退会済みユーザー

退会済みユーザー

2017/10/10 09:52

これも同じことでしょうか?コードは書いて期待した順番どおりに動いてくれてはいますが。
karamarimo

2017/10/10 10:16 編集

動作は同じだと思いますが、nodejsではcallbackが自力で非同期に実行するのではなくcallbackを引数にとる関数がそれをする、というのが普通な気がします。
guest

0

状況がよくわからないのですが
valueはグローバルな変数ではないのでcallbackから影響をうけないですよね?
であれば先に返しても後に返しても同じではないでしょうか?
もう少しソースをきちんと書いてもらえるとイメージがと思います。

投稿2017/10/10 08:45

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

callback();callback(value);にすれば,returnも不要です.

投稿2017/10/10 08:35

stoshiya

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/10 08:38

callback()とreturnするvalueは関係ないものとお考え下さいませ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問