承诺在 IF 语句之前未解决
Promise not resolving before IF STATEMENT
我正在尝试检查“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
函数中,您 return 一个 Promise。当您像这样调用 checkWorkflow
函数时:
const doesWorkflowExists = checkWorkflow(req.name);
doesWorkflowExists
是待处理的 Promise。在控制台上,您可以看到。
您需要“等待”,直到 Promise resolve
结果或 reject
错误。只需在函数调用前添加“await”关键字,如下所示:
const doesWorkflowExists = await checkWorkflow(req.name);
其余的似乎没问题,应该可以:)
我正在尝试检查“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
函数中,您 return 一个 Promise。当您像这样调用 checkWorkflow
函数时:
const doesWorkflowExists = checkWorkflow(req.name);
doesWorkflowExists
是待处理的 Promise。在控制台上,您可以看到。
您需要“等待”,直到 Promise resolve
结果或 reject
错误。只需在函数调用前添加“await”关键字,如下所示:
const doesWorkflowExists = await checkWorkflow(req.name);
其余的似乎没问题,应该可以:)