javascript - 如何在条件字符串中使用多个 async / await 调用?
问题描述
我正在使用带有条件的 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));
推荐阅读
- javascript - 阴谋在过去
- docker - 如何测试 gcr.io 中是否已存在 docker 映像的特定标签?
- javascript - Material-UI按钮点击后消失
- android - 错误处理后如何重用 Kotlin 协程?
- c - 尝试将文件输入数组时出现段错误
- c# - 有没有办法对多个值进行排序,并且只保留每个值中的最大值?
- python - 在 html 页面中从 python 代码处理后显示图像
- android - Google Play:无法安装应用程序,错误 504 (INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)
- google-apps-marketplace - 如何屏蔽谷歌市场显示文件中的输入文本
- c++ - 返回指针的函数是否要求我删除返回的值?