コードのスタイルについて.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]
コメントを追加