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

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

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

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

Q&A

解決済

3回答

3044閲覧

非同期処理を完全に同期化することはできますか?

qope

総合スコア16

JavaScript

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

0グッド

1クリップ

投稿2021/04/05 16:26

次のような非同期的な関数fがあったとします。

javascript

1const f = new Promise((resolve, reject) => { 2 setTimeout(()=> resolve(1), 1000) 3})

この関数で解決される値resを用いて、処理g(res), h(res),...を実行したい時、

javascript

1f.then(res=>{ 2 g(res); 3 h(res); 4 ... 5})

と書けば良いことは知っていますが、これを

javascript

1const res = fを使った何らかの式; 2g(res); 3h(res);

のようにthenの外に出して、fが完全な同期関数であるかのように書くことはできるのでしょうか?

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

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

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

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

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

hoshi-takanori

2021/04/06 01:01

完全な同期関数にすることはできませんが、async/await を使ってあたかも同期関数であるかのように書くことはできます。(一応挙動は違うので、「完全な同期関数であるかのように」という言い方は違和感…。)
guest

回答3

0

ベストアンサー

async_functionの中でなら書けます

javascript

1(async ()=>{ 2 var r=await f; 3 console.log(r); 4})();

投稿2021/04/05 18:50

hentaiman

総合スコア6426

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

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

0

こんな感じです

javascript

1const f = ()=>new Promise(resolve => { 2 setTimeout(()=> resolve(1), 1000); 3}); 4const g = (arg)=>new Promise(resolve => { 5 setTimeout(()=> resolve(arg+"2"), 500); 6}); 7const h = (arg)=>new Promise(resolve => { 8 setTimeout(()=> resolve(arg+"3"), 300); 9}); 10 11(async()=>{ 12 const res=await f(); 13 console.log(res); 14 Promise.all([g(res),h(res)]).then(data=>console.log(data)); 15})();

投稿2021/04/06 00:15

編集2021/04/06 00:16
yambejp

総合スコア115010

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

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

0

非同期処理を完全に同期化することはできますか?

できません

非同期処理を同期化するためには、非同期部分の処理を別スレッドで行い完了待機する必要があります。
これをするためにはマルチスレッドが絶対条件ですが、javascriptはシングルスレッドなので絶対出来ません。

投稿2021/04/05 23:26

fijino

総合スコア136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問