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

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

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

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

582閲覧

await Promise を使った非同期処理

rwewe

総合スコア9

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/08/24 09:36

編集2020/08/24 13:24

下記のコードの await new Promise<Login>(async (resolve, reject)ところで質問です。
Promiseもawaitも非同期をするためのものだと思うのですがなぜPromiseとawaitの両方を使っているのでしょうか?
わかる人いましたらご教授お願いしたいです。

export const postLogin(email: string, password: string) { interface Login { email: string; password: string; } const res = await new Promise<Login>(async (resolve, reject) => { const path = '/login'; try { const response: Login = await Axios.get(path, { params: { email, password }, }); resolve(response); } catch (err) { reject(err); } }); return res; } }

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記

export const postLogin(email: string, password: string) { const path = '/login'; try { const res: Login = await Axios.get(path, { params: { email, password } )}; resolve(res); } catch(err) { rejects(err) } return res; }
エラ-メッセージ Parsing error: ',' expected.eslint 名前 'res' が見つかりません。ts(2304) 'try' が必要です。ts(1005)

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

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

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

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

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

guest

回答1

0

なぜPromiseとawaitの両方を使っているのでしょうか?

同一行にPromiseawaitがいるためややこしくなっているのではないでしょうか?
ざっくりとした解釈になりますが、要するに下記と同じことをしています。

javascript

1 2// 最終的にresponseをresolveするpromise 3const promise = new Promise<Login>(async (resolve, reject) => { 4 // ...略 5 resolve(response); 6 // ...略 7}); 8 9// promise内のresolveを待ってその結果を取得(あくまで感覚的な表現です) 10const res = await promise;

const promise = ...const res = ...の間で色々と処理を挟む場合もありますが、この例ではそういった処理もないため同一行で記載されているのかもしれません。

ちなみに、axios.getPromiseを返してくれるので独自でnew Promiseを書く必要はないと思います。

javascript

1const path = '/login'; 2const res : Login = await Axios.get(path, { 3 params: { email, password }, 4});

投稿2020/08/24 09:51

nekoniki

総合スコア2409

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

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

rwewe

2020/08/24 10:29

回答ありがとうございます!! new Promiseを書く必要がなくなった場合のコードとは上記ので合っていますか?
nekoniki

2020/08/24 10:31

> new Promiseを書く必要がなくなった場合のコードとは上記ので合っていますか? その認識です
rwewe

2020/08/24 10:32

try { const response: Login = await Axios.get(path, { params: { email, password }, }); resolve(response); } catch (err) { reject(err); } }); return res; 上記のはいらないのでしょうか?
rwewe

2020/08/24 13:25

ありがとうございます。 参考にしてやってみましたが上記のエラーが出てしまいます。
nekoniki

2020/08/24 13:41

1つ目のエラーはおそらくlintの設定なのでお手元の設定を確認ください。おそらく末尾カンマ等に関する設定です。 2つ目,3つ目はブロックの位置がおかしかったです。 また、resolveはreturn,rejectは適宜エラー処理に置き換えましょう。 export const postLogin(email: string, password: string) { const path = '/login'; try { const res: Login = await Axios.get(path, { params: { email, password } }); return res; } catch(err) { console.log(err); } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問