Javascript 在函数返回值之前比较两个值

Javascript 在函数返回值之前比较两个值,javascript,node.js,Javascript,Node.js,我有一些代码,其中一个函数(包含一个承诺)运行,然后返回一个布尔值。然后检查该值是否为真,如果为真,请运行其他代码。我将这些值记录到控制台以进行一些调试,我注意到检查函数是否返回true的if语句在函数返回任何内容之前运行 我曾尝试使用“wait”和“async”,但在使用它们时没有发现任何成功 javascript function myFunc() promise() .then(value => { console.log('Returned tr

我有一些代码,其中一个函数(包含一个承诺)运行,然后返回一个布尔值。然后检查该值是否为真,如果为真,请运行其他代码。我将这些值记录到控制台以进行一些调试,我注意到检查函数是否返回true的if语句在函数返回任何内容之前运行

我曾尝试使用“wait”和“async”,但在使用它们时没有发现任何成功

javascript
function myFunc()
   promise()
      .then(value => {
         console.log('Returned true');
         return true;
      })
      .catch(err => {
         console.log('Error', err);
      });
end

if (myFunc()) {
   console.log('Value was true');
} else {
   console.log('Value was false');
}
预期:

Returned true
Value was true
实际:

Value was false
Returned true

您正试图从函数内部返回一个承诺,在使用承诺的那一刻,您正在处理异步代码。这意味着为了从承诺中获得价值,首先需要履行承诺

在您的例子中,您评估的是函数的返回值,而不是承诺的返回值。由于函数中没有显式返回,因此返回的是未定义的。这就是为什么您会在控制台中看到
值为false
。然后,您的承诺得到了实现,您在控制台中看到
返回true
,但您从未评估过承诺返回的值

假设您正在从需要使用的全局范围调用函数,那么使用语法来访问承诺返回的值

如果你的函数是这样的:

function myFunc() {
  return Promise.resolve()
    .then(value => {
      console.log('Returned true');
      return true;
    })
 }
myFunc().then(value => {
   if(value) console.log('It is true')
   else console.log('Is it false')
 })
您的if语句应该变成这样:

function myFunc() {
  return Promise.resolve()
    .then(value => {
      console.log('Returned true');
      return true;
    })
 }
myFunc().then(value => {
   if(value) console.log('It is true')
   else console.log('Is it false')
 })
基本上,您等待承诺实现,当这种情况发生时,您通过param获得返回值(在这个简单的示例中,它总是正确的,但也可能是错误的)


我希望这对您有所帮助。

尝试从函数返回承诺:

function myFunc()
   return promise()
      .then(value => {
         console.log('Returned true');
         return true;
      })
      .catch(err => {
         console.log('Error', err);
      });
end

if (myFunc()) {
   console.log('Value was true');
} else {
   console.log('Value was false');
}
这不是最好的做法,我会坚持一个好的承诺链:

promise()
  .then(value => {
     if (value) {
       console.log('Value was true');
     } else {
       console.log('Value was false');
     }
   })
   .catch(err => {
         console.log('Error', err);
   });
您需要使用“wait”来等待承诺响应

promise = () => new Promise( (resolve, reject ) => resolve(true) );

async function myFunc(){
   try {
     let value = await promise();

     if (value === true){
       console.log('Returned true');
       return true;
     }
   } catch (err) {
     console.log('Error', err);
   }
}

async function main(){

  if ( await myFunc() ) {
   console.log('Value was true');
  } else {
   console.log('Value was false');
  }
}

main();