teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

内容の更新

2024/06/22 23:17

投稿

3_April_2021
3_April_2021

スコア48

answer CHANGED
@@ -1,33 +1,13 @@
1
- Promise コンストラクターの引数の呼び方が不確かなので、質問に従って`x`と`y`を使用します。Promise オブジェクト(p)に対して使えるメソッドにthen()とcatch()があります。then()引数が1つら、単純に`x`が返されたときに行されようす*`x => x(5)`ならば`'then!'`を確認しますが`x => 5`では確認できせん
1
+ await を使った [try...catch](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/try...catch) 非同期処理の簡易エラーハンドリングを現するでしょうただし、await の動作を確認したい場合はsetTimeout() などを使用するのが適切な場合があり
2
- ```js
3
- p.then(() => console.log('then!'));
4
- ```
2
+ ```
5
- catch()は返された値を取得できない場合か、`y`が返されたときに機能するようです。`() => ok`(未作成変数)や`() => x(5)`あるいは`(x,y) => y('five')`ならば`'catch!'`を確認しますが、` `では確認できません。
6
- ```js
7
- p.then(() => console.log('then!')
3
+ async function performCheck(isTruthy) {
4
+ try {
5
+ console.log(await checkTruthyValue(isTruthy));
6
+ } catch (error) {
8
- ).catch(() => console.log('catch!'))
7
+ console.error('Error:', error);
8
+ }
9
+ }
10
+
11
+ performCheck(true);
9
- ```
12
+ ```
10
- (引数が1つの)then()は`x`、catch()は`y`に入れた値を引数の引数として使用できるようです。
11
- ```js
12
- //念の為の確認
13
- const p = new Promise((x,y) => {if(tf){x(5)}else{y('five')}});
14
- p.then(num => console.log(num,typeof num)//number
15
- ).catch(str => console.log(str, typeof str));//string
16
- ```
17
- await expressionは、expressionがPromise オブジェクトかつ`x`が返されたときには`x`に入れた値になるようです(つまり`typeof await test(1)`は`number`を返します)。
18
- エラーメッセージの表示自体はconsole.errorで再現されたため、それも用いて単に同じように見える処理を書くことを今試みるならば、次のようになるでしょう。
19
- ```js
20
- function test(tf) {
21
- const p = new Promise((x,y) => {if(tf){return x(tf)};return y('falsy');});
22
- p.then(value => console.log(value)
23
- ).catch(reason => console.error(`Uncaught (in promise) ${reason}`));
24
- }
25
- async function call() {await test(tf);}
26
- ```
27
- 質問コードはawait / asyncをまだ実質的には使用していないと言える状態だと思われるため、これらの方法がawait / asyncという方法のうえで適切かどうかには言及できません。
28
- *then()は2つ目の引数使用するとcatch()と同等見える処理が行えました。しかしこれら使分けについては調べていません。
13
+ 非同期処理で複雑なエラー処理するにPromise について学ぶ必要があるでしょう。同期処理と非同期処理の違も改めて確認する必要があるかもしれません。
29
- ```js
30
- p.then(value => console.log(value)
31
- , reason => console.error(`Uncaught (in promise) ${reason}`))
32
- ```
33
- 一定期間のうちに内容への指摘が確認できなかったため、ここまでの自己進展を回答として一旦締め切ります。