非同期のキャッチがコードの起動を待たないのはなぜですか?

サミュエル・フラ

コードのスタイルについて.catch()Promisesにあるような方法はありasync awaitますか?

Promiseを介して記述されたコードの例を次に示します。

const apiURL = 'https://jsonplaceholder.typicode.com/todos/1';
const badURL = 'zhttps://wcaf.fajfkajf.gg'

function getData(url){
  fetch(url)
    .then(response => response.json())
    .then(json => console.log(json))
      .catch( err => console.log('cannot load api'))
}
  
getData(apiURL);
getData(badURL);

データを読み込もうとし、そうでない場合は基本的なエラーメッセージを表示する簡単な関数。今、私はこれをasync/awaitスタイルコードに書き写そうとしていました、問題は、これを書く方法を本当に理解できなかったということでしたcatch()


私の最善の推測は試してみることtry - catchでしたが、キャッチ部分は機能しません:

const apiURL = 'https://jsonplaceholder.typicode.com/todos/1';
const badURL = 'zhttps://wcaf.fajfkajf.gg'

async function getData(url){
  const response = await fetch(url);
  try {
     const json = await response.json();
     console.log(json);
  } catch (e) {
     console.log('cannot load api');
  }
}
  
getData(apiURL);
getData(badURL);

これにより、オブジェクトAPIが正常に読み込まれますが、catch{}間違ったURLが渡されてもブロックに入らないようです。

私が間違っていることは何ですか?

サミュエル・フラ

@ l-portetのコメントで指摘されているように、これはtry { }ブロック内のコードが実際に失敗しないためです。

.json()解析された本文テキストの内容に関係なく、promiseが返されるため、最初のテキストfetch()が失敗した場合でも.json()、それを呼び出すことができます-意味のあるものを返さないため、完全に冗長ですが。

fetch()リクエストをtry { }ブロック内に置くと、期待される動作が得られます。

const apiURL = 'https://jsonplaceholder.typicode.com/todos/1';
const badURL = 'zhttps://wcaf.fajfkajf.gg'

async function getData(url){
  try {
     const response = await fetch(url);
     const json = await response.json();
     console.log(json);
  } catch (e) {
     console.log('cannot load api');
  }
}
  
getData(apiURL);
getData(badURL);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

この非同期/待機コードがデッドロックを引き起こさないのはなぜですか?

分類Dev

javascript非同期関数がfirebase.authメソッドの終了を待たないのはなぜですか?

分類Dev

コードが例外をキャッチしないのはなぜですか?

分類Dev

非同期がTwitterコールバックの起動を妨げるのはなぜですか?

分類Dev

非同期メソッドが「serialPort = await SerialDevice.FromIdAsync()」を待機しないのはなぜですか?

分類Dev

このコンソールアプリの非同期待機パターンがデッドロックを引き起こしたのはなぜですか?

分類Dev

この非同期コードが停止しないのはなぜですか?

分類Dev

なぜ非同期関数でキャッチした後も例外がスローされるのですか?

分類Dev

Task.Run()がUIスレッド/オリジンコンテキストに同期するのを待たないのはなぜですか?

分類Dev

setTimeoutを使用する同期コードがJavaScriptで非同期に動作するのはなぜですか?

分類Dev

多層非同期関数がノードの最下位レベルでスローされたエラーをキャッチしないのはなぜですか?

分類Dev

エラーが渡されない限り、.catch()が非同期関数のループ内のPromiseコンストラクター内でreject()をキャッチしないのはなぜですか?

分類Dev

非同期メソッドでコードをデバッグできないのはなぜですか?

分類Dev

非同期メソッドでコードをデバッグできないのはなぜですか?

分類Dev

非同期メソッドでコードをデバッグできないのはなぜですか?

分類Dev

非同期コードが非同期で実行されないのはなぜですか?

分類Dev

このコードキャッチブロックが実行されないのはなぜですか?

分類Dev

この非同期メソッドにコンパイルエラーがないのはなぜですか?

分類Dev

GenServerで非同期メッセージを処理するために「キャスト」という言葉が使用されるのはなぜですか?

分類Dev

ブルーバードプロミス内の非同期関数内からスローされたエラーが.catch()関数でキャッチされないのはなぜですか?

分類Dev

luaコードがエラーをスローしたときにluabind :: error例外をキャッチできないのはなぜですか?

分類Dev

C#で非同期メソッドの呼び出しを待たなければならないのはなぜですか

分類Dev

C#7-非同期メソッドからこの待機可能な型を返すことができないのはなぜですか?

分類Dev

Kotlinコルーチンの起動/参加と非同期/待機の違いは何ですか

分類Dev

例外をスローしないコードでチェック例外のキャッチが許可されているのはなぜですか?

分類Dev

Catchがエラーをキャッチしないのはなぜですか?

分類Dev

同期コンテキストが待機のために機能しないのはなぜですか?

分類Dev

非同期関数の前で待機していない場合、try catchブロックによってエラーがキャッチされますか?

分類Dev

この再帰的な正規表現がコードブロック全体をキャプチャしないのはなぜですか?

Related 関連記事

  1. 1

    この非同期/待機コードがデッドロックを引き起こさないのはなぜですか?

  2. 2

    javascript非同期関数がfirebase.authメソッドの終了を待たないのはなぜですか?

  3. 3

    コードが例外をキャッチしないのはなぜですか?

  4. 4

    非同期がTwitterコールバックの起動を妨げるのはなぜですか?

  5. 5

    非同期メソッドが「serialPort = await SerialDevice.FromIdAsync()」を待機しないのはなぜですか?

  6. 6

    このコンソールアプリの非同期待機パターンがデッドロックを引き起こしたのはなぜですか?

  7. 7

    この非同期コードが停止しないのはなぜですか?

  8. 8

    なぜ非同期関数でキャッチした後も例外がスローされるのですか?

  9. 9

    Task.Run()がUIスレッド/オリジンコンテキストに同期するのを待たないのはなぜですか?

  10. 10

    setTimeoutを使用する同期コードがJavaScriptで非同期に動作するのはなぜですか?

  11. 11

    多層非同期関数がノードの最下位レベルでスローされたエラーをキャッチしないのはなぜですか?

  12. 12

    エラーが渡されない限り、.catch()が非同期関数のループ内のPromiseコンストラクター内でreject()をキャッチしないのはなぜですか?

  13. 13

    非同期メソッドでコードをデバッグできないのはなぜですか?

  14. 14

    非同期メソッドでコードをデバッグできないのはなぜですか?

  15. 15

    非同期メソッドでコードをデバッグできないのはなぜですか?

  16. 16

    非同期コードが非同期で実行されないのはなぜですか?

  17. 17

    このコードキャッチブロックが実行されないのはなぜですか?

  18. 18

    この非同期メソッドにコンパイルエラーがないのはなぜですか?

  19. 19

    GenServerで非同期メッセージを処理するために「キャスト」という言葉が使用されるのはなぜですか?

  20. 20

    ブルーバードプロミス内の非同期関数内からスローされたエラーが.catch()関数でキャッチされないのはなぜですか?

  21. 21

    luaコードがエラーをスローしたときにluabind :: error例外をキャッチできないのはなぜですか?

  22. 22

    C#で非同期メソッドの呼び出しを待たなければならないのはなぜですか

  23. 23

    C#7-非同期メソッドからこの待機可能な型を返すことができないのはなぜですか?

  24. 24

    Kotlinコルーチンの起動/参加と非同期/待機の違いは何ですか

  25. 25

    例外をスローしないコードでチェック例外のキャッチが許可されているのはなぜですか?

  26. 26

    Catchがエラーをキャッチしないのはなぜですか?

  27. 27

    同期コンテキストが待機のために機能しないのはなぜですか?

  28. 28

    非同期関数の前で待機していない場合、try catchブロックによってエラーがキャッチされますか?

  29. 29

    この再帰的な正規表現がコードブロック全体をキャプチャしないのはなぜですか?

ホットタグ

アーカイブ