async/await 構文で拒否するにはどうすればいいですか? 質問する

async/await 構文で拒否するにはどうすればいいですか? 質問する

async/関数によって返された promise を拒否するにはどうすればよいですかawait?

例: 元々:

foo(id: string): Promise<A> {
  return new Promise((resolve, reject) => {
    someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400))
  });
}

に翻訳するasync/ await

async foo(id: string): Promise<A> {
  try{
    await someAsyncPromise();
    return 200;
  } catch(error) {//here goes if someAsyncPromise() rejected}
    return 400; //this will result in a resolved promise.
  });
}

では、この場合、この約束を適切に拒否するにはどうすればよいでしょうか?

ベストアンサー1

最善の策は、値をラップすることですthrow。これにより、値がラップされErrorた Promise が拒否されます。Error

} catch (error) {
    throw new Error(400);
}

throw値だけを指定することもできますが、その場合スタック トレース情報は表示されません。

} catch (error) {
    throw 400;
}

Errorあるいは、値をラップした拒否されたプロミスを返しますが、これは慣用的ではありません。

} catch (error) {
    return Promise.reject(new Error(400));
}

(またはreturn Promise.reject(400);単に とすることもできますが、この場合もコンテキスト情報はありません。)

あなたの場合、TypeScriptfooの戻り値が なのでPromise<A>、次のように使用します。

return Promise.reject<A>(400 /*or Error*/ );

async/ の状況ではawait、最後の部分はおそらく意味的に少し不一致ですが、機能します。

をスローすると、次の構文を使用して の結果Errorを消費するあらゆるものとうまく連携します。fooawait

try {
    await foo();
} catch (error) {
    // Here, `error` would be an `Error` (with stack trace, etc.).
    // Whereas if you used `throw 400`, it would just be `400`.
}

おすすめ記事