Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺在IF语句之前不解决_Javascript_Node.js_Mongoose_Request Promise - Fatal编程技术网

Javascript 承诺在IF语句之前不解决

Javascript 承诺在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

我试图检查“checkWorkflow”的结果,但它似乎在检查之前运行“If”语句,我认为这是因为我的控制台输出。 我觉得我的承诺有点做错了,但现在我有点不知所措

控制台输出

当i console.log(doesWorkflowExists)时承诺{pending}*

工作流已存在,请重命名

错误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");
  }
};
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);

剩下的似乎没问题,它应该可以工作:)

那么它的工作方式正是它应该的?