Javascript 从使用承诺的函数返回布尔值?

Javascript 从使用承诺的函数返回布尔值?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我有下面的助手函数 userExist(email) { this.findUserByEmail(email).then(result => { return true; }).catch(error => { return false; }); } 然后我在另一个文件中调用它: var stuff = userService.userExist('abc') console.log(stuff); 但是,由于函数是一个承诺

我有下面的助手函数

userExist(email) {
    this.findUserByEmail(email).then(result => {
      return true;
    }).catch(error => {
      return false;
    });

  }
然后我在另一个文件中调用它:

var stuff = userService.userExist('abc')
console.log(stuff);
但是,由于函数是一个承诺,因此stuff始终是未定义的,我如何等待该值返回给我的助手函数返回true或false

使用该方法附加一个回调,该回调将在承诺解析后调用:

userService.userExist('abc').then(stuff => {
  console.log(stuff);
})
使用该方法附加一个回调,该回调将在承诺解析后调用:

userService.userExist('abc').then(stuff => {
  console.log(stuff);
})

在大多数情况下,不使用Thenable是不可能的。承诺是表示异步工作的对象。如果您通过等待来等待作业完成,那么一切都将冻结,因为JS通常在单线程环境中运行

如果要在为异步内容编写同步编程的环境中编写代码,请尝试异步/等待语法。我非常喜欢它。基本上,它看起来是这样的:

async function checkUserExists() {
  const exists = await userService.userExists('abc')
  console.log('Exists', exists)
}

你需要意识到承诺仍然是暗中进行的。为了向后兼容ES5,Babel和Typescript现在都支持这种语法。根据Node,它从7.6开始就有支持。

在大多数情况下不可能没有Thenable。承诺是表示异步工作的对象。如果您通过等待来等待作业完成,那么一切都将冻结,因为JS通常在单线程环境中运行

如果要在为异步内容编写同步编程的环境中编写代码,请尝试异步/等待语法。我非常喜欢它。基本上,它看起来是这样的:

async function checkUserExists() {
  const exists = await userService.userExists('abc')
  console.log('Exists', exists)
}

你需要意识到承诺仍然是暗中进行的。为了向后兼容ES5,Babel和Typescript现在都支持这种语法。根据Node,它从7.6开始就有支持。

有没有一种方法可以在不启用该功能的情况下执行此操作?我只是想把它用作一个助手函数,所以,别忘了在
userExist
中返回承诺,有没有一种方法可以在不启用它的情况下实现这一点?我只是想把它用作一个助手函数,所以,不要忘记在
userExist
中返回承诺,这个语法只在引擎盖下使用。请不要在你的答案中误报。Babel实现在传输时使用它们。请原谅我的困惑。它这样做是出于方便和必要,因为用户区的限制,而不是因为规范要求这样做。它看起来类似于生成器函数,但在v8和其他引擎中,生成器函数不用于实现异步函数。您有这方面的源代码吗?关于这个主题的一些文章似乎建议以这种方式实现该功能。而且
async/await
实现似乎比生成器更快。感谢您的更正。此语法仅在引擎盖下使用。请不要在你的答案中误报。Babel实现在传输时使用它们。请原谅我的困惑。它这样做是出于方便和必要,因为用户区的限制,而不是因为规范要求这样做。它看起来类似于生成器函数,但在v8和其他引擎中,生成器函数不用于实现异步函数。您有这方面的源代码吗?关于这个主题的一些文章似乎建议以这种方式实现该功能。而且
async/await
实现似乎比生成器更快。谢谢你的更正。