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

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

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

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

Q&A

4回答

2629閲覧

関数の返り値として非同期処理の結果を返したい

xyukinokaze

総合スコア12

JavaScript

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

1グッド

2クリップ

投稿2019/05/10 07:34

編集2019/05/10 08:11

前提・実現したいこと

ある関数の中で、非同期処理を呼び出しその結果を関数の返り値となるようにしたいです。
想定するコードは下記のようなものです。

javascript

1function tester () { 2 let message = 'hoge' 3 var timeouted = function () { 4 message = 'fuga' 5 console.log(message) 6 } 7 setTimeout(timeouted,1000) 8 9 console.log(message) 10 return message 11}

上記のコードですを動作させると返り値が'hoge'となります。
上記関数で返り値がfugaとなるような方法がないでしょうか。

takara2314👍を押しています

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

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

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

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

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

m.ts10806

2019/05/10 07:36

タイトルと質問内容の関連性がいまひとつ掴めません。 わかるように具体的に説明いただけますか?
m.ts10806

2019/05/10 07:37

あぁ・・・2,3分考えて理解しました。
xyukinokaze

2019/05/10 07:51

mts10806さん。ありがとうございます。タイトルを変更してみました。
m.ts10806

2019/05/10 07:54

反映されていないようです。
xyukinokaze

2019/05/10 08:16

すみません、今度は反映されたかと思います。
m.ts10806

2019/05/10 08:17

確認しました(既に私が「これ」という回答がついているので私の方では今回回答はしませんが・・)
guest

回答4

0

上記関数で返り値がfugaとなるような方法がないでしょうか。

ありません。

投稿2019/05/10 07:37

maisumakun

総合スコア145183

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

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

0

こんな感じのことがやりたいんですかね?

javascript

1async function tester(){ 2 let message = 'hoge'; 3 4 // 非同期処理を呼び出し 5 let timeoutedPromise = new Promise(function(resolve) { 6 7 let timeouted = function () { 8 message = 'fuga'; 9 console.log('#1 ' + message); // 非同期処理が終わったときのログ出力 10 resolve(message); 11 }; 12 setTimeout(timeouted,1000) 13 14 }); 15 message = await timeoutedPromise; 16 console.log('#2 ' + message); // 非同期処理の結果をログ出力 17 18 // その結果を関数の返り値として戻す 19 return message; 20} 21 22async function main() { 23 let result = await tester(); 24 console.log('#3 ' + result); // tester関数の戻り値をログ出力 25} 26 27main(); // 実行 28 29// 【結果】 30// #1 fuga 31// #2 fuga 32// #3 fuga

投稿2019/05/10 08:51

編集2019/05/10 09:10
ku__ra__ge

総合スコア4524

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

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

xyukinokaze

2019/05/10 09:04

ありがとうございます! すばらしいですね。 このパターンの場合、呼び出し元がasyncである必要があるため問題がないか設計を検討してみます。
guest

0

setTimeout という関数がどういう仕様なのかを確認してみましょう

Window​OrWorker​Global​Scope​.set​Timeout()

投稿2019/05/10 07:54

y_waiwai

総合スコア87747

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

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

xyukinokaze

2019/05/10 08:14

ごめんなさい。setTimeoutは非同期処理としての例でした。 具体的にはcordovaのあるプラグインの処理結果を同期的に返したいです。 userdfaults等の値をネイティブ側から取得したいのですが、ネイティブであれば同期でとれるものを 非同期として書かなくてはならないので困っています。
y_waiwai

2019/05/10 09:58

なら、まずはその結果がなぜ不可能か、を理解しましょう。 それができないうちはこの問題を解決することはできません
guest

0

グ、グローバル変数を使えばワンチャン、一応アクセス範囲的に言えばfugaにすることは可能です。
おススメはしませんが...

投稿2019/05/10 07:53

編集2019/05/10 07:56
stdio

総合スコア3307

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

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

xyukinokaze

2019/05/10 09:05

ありがとうございます。 グローバルですよね。。。 letで宣言している通りスコープをしっかりしておきたいので。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問