Javascript 承诺在IF语句之前不解决
我试图检查“checkWorkflow”的结果,但它似乎在检查之前运行“If”语句,我认为这是因为我的控制台输出。 我觉得我的承诺有点做错了,但现在我有点不知所措 控制台输出 当i console.log(doesWorkflowExists)时承诺{pending}* 工作流已存在,请重命名 错误2Javascript 承诺在IF语句之前不解决,javascript,node.js,mongoose,request-promise,Javascript,Node.js,Mongoose,Request Promise,我试图检查“checkWorkflow”的结果,但它似乎在检查之前运行“If”语句,我认为这是因为我的控制台输出。 我觉得我的承诺有点做错了,但现在我有点不知所措 控制台输出 当i console.log(doesWorkflowExists)时承诺{pending}* 工作流已存在,请重命名 错误2 const createWorkflow = async (req, res) => { try { const doesWorkflowExists = chec
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");
}
};
vvv检查工作流vvv
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
函数中,您返回一个承诺。当您调用checkWorkflow
函数时,如下所示:
const doesWorkflowExists = checkWorkflow(req.name);
doesWorkflowExists
是一个待定的承诺。在控制台上,您可以看到
您需要“等待”直到承诺解决结果或拒绝错误。只需在函数调用之前添加“wait”关键字,如下所示:
const doesWorkflowExists = await checkWorkflow(req.name);
剩下的似乎没问题,它应该可以工作:)那么它的工作方式正是它应该的?