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);
単に とすることもできますが、この場合もコンテキスト情報はありません。)
あなたの場合、TypeScript
とfoo
の戻り値が なのでPromise<A>
、次のように使用します。
return Promise.reject<A>(400 /*or Error*/ );
async
/ の状況ではawait
、最後の部分はおそらく意味的に少し不一致ですが、機能します。
をスローすると、次の構文を使用して の結果Error
を消費するあらゆるものとうまく連携します。foo
await
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`.
}