javascript - 承诺在 IF 语句之前不解决
问题描述
我正在尝试检查“checkWorkflow”的结果,但它似乎在检查之前运行了“If”语句,我认为这是因为我的控制台输出。我觉得我做错了承诺,但在这一点上我有点迷茫。
控制台输出
Promise { pending } *当我 console.log(doesWorkflowExists)
工作流程已存在,请重命名
错误2
const createWorkflow = async (req, res) => {
try {
const doesWorkflowExists = checkWorkflow(req.name);
if (!doesWorkflowExists) {
console.log('do stuff')
}
else {
console.log('workflow already exists, please rename')
}
} catch (error) {
handleError(res, error);
console.log("error on create workflow");
}
};
vvvv checkWorkflow vvvv
const checkWorkflow = (name = '') => {
return new Promise((resolve, reject) => {
Workflow.findOne(
{
name,
},
(err, item) => {
if (err) {
console.log('error1')
return reject(buildErrObject(422, err.message));
}
if (item) {
console.log('error2')
return reject(buildErrObject(404, "WORKFLOW_ALREADY_EXISTS"));
}
resolve();
}
);
});
};
解决方案
在你的checkWorkflow
函数中,你返回一个 Promise。当你checkWorkflow
这样调用函数时:
const doesWorkflowExists = checkWorkflow(req.name);
doesWorkflowExists
是一个待处理的 Promise。在控制台上,您可以看到这一点。
您需要“等待”直到 Promiseresolve
结果或reject
错误。只需在函数调用之前添加“await”关键字,如下所示:
const doesWorkflowExists = await checkWorkflow(req.name);
其余的似乎都很好,它应该可以工作:)
推荐阅读
- c - strcmp 在一个简单的字符串搜索程序中返回 __strcmp_sse2_unaligned()
- sql - 在今天的两个时间之间生成时隙
- postgresql - Postgres JSONB 检索非常慢
- python - RuntimeError:b'在初始化列表中没有参数'(folium)
- java - 数据库架构的最佳方法主要集中在按年和按月同时存储不同字段的数据
- ansible - 如何修复 ansible uri 模块错误有超过 100 个标头?
- android - 有没有办法在进度条中放置分隔线?
- python-3.x - Django网站说“找不到页面(404)”
- qt - QT:从串口连续读取数据的问题
- c# - 查找子节点中所有计数属性的总和