私はasync / awaitを条件付きで使用しています:
async function validate() {
const a = await validateA()
const b = await validateB()
const c = await validateC()
return a && b && c ? true : false
}
ただし、validateAがfalseを返した場合、validateBとvalidateCを実行する理由がないため、これは理想的ではないようです。
私はそれを次のように書き直すことができます:
async function validate() {
const a = await validateA()
if (!a) return false
const b = await validateB()
if (!b) return false
const c = await validateC()
return c ? true : false
}
しかし、これは私には醜いように見えます。
本当に私はこのようなことをしたいと思います(擬似コード):
async function validate() {
return await validateA() && await validateB() && await validateC() ? true : false
}
もちろんこれは機能しませんが、ifステートメントと同様に、条件が失敗した場合、後続の条件は評価されないことを目的としています。
async / awaitでこれを正しく書くにはどうすればよいですか?
async function validate() {
return await validateA() && await validateB() && await validateC() ? true : false
}
もちろんこれは機能しませんが、ifステートメントと同様に、条件が失敗した場合、後続の条件は評価されないことを目的としています。
できます。
validateX
ブール値を解決するため、次のように記述できます。
return await validateA() && await validateB() && await validateC();
const validateA = () => Promise.resolve(true);
const validateB = () => Promise.resolve(true);
const validateC = () => Promise.resolve(false);
async function validate() {
return await validateA() && await validateB() && await validateC();
}
validate().then(res => console.log(res));
それを達成する別の方法は、解決する代わりに約束を拒否することfalse
です。
const validateA = () => Promise.resolve();
const validateB = () => Promise.reject(); // Reject if validation fails
const validateC = () => Promise.resolve();
async function validate() {
try {
await validateA();
await validateB(); // This will reject
await validateC(); // This won't run
return true; // If all validateX were resolved, return true.
} catch(e) {
return false;
}
}
validate().then(res => console.log(res));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加