回答編集履歴
1
内容の更新
answer
CHANGED
@@ -1,33 +1,13 @@
|
|
1
|
-
|
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
|
-
|
3
|
+
async function performCheck(isTruthy) {
|
4
|
+
try {
|
5
|
+
console.log(await checkTruthyValue(isTruthy));
|
6
|
+
} catch (error) {
|
8
|
-
|
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
|
-
|
13
|
+
非同期処理で複雑なエラーを処理するには、Promise の扱い方について学ぶ必要があるでしょう。同期処理と非同期処理の違いも改めて確認する必要があるかもしれません。
|
29
|
-
```js
|
30
|
-
p.then(value => console.log(value)
|
31
|
-
, reason => console.error(`Uncaught (in promise) ${reason}`))
|
32
|
-
```
|
33
|
-
一定期間のうちに内容への指摘が確認できなかったため、ここまでの自己進展を回答として一旦締め切ります。
|