【问题标题】:Passport JS and custom async/await functionPassport JS 和自定义 async/await 函数
【发布时间】:2021-06-08 06:49:48
【问题描述】:

我正在使用 Passport JS 本地策略,并想添加一个自定义函数,对用户提供的电子邮件进行一些验证

async function checkEmail(email) {
  const url = `https://endpoint-to-url/${email}`;
  await fetch(url)
    .then(response => response.json())
    .then(async json => {
      let result;
      if (json.status === 200 && json.temporary === true) {
        result = true;
      } else {
        result = false;
      }
      return result;
    })
    .catch(async function(error) {
      console.log(`Error whilst checking email ${error}`);
    });
}

护照 JS

passport.use(
'local-signup',
new LocalStrategy(
  {
    usernameField: 'signup_email',
    passwordField: 'signup_password',
    passReqToCallback: true,
  },
  async (req, email, password, done) => {
    process.nextTick(async () => {
      const isTempEmail = await checkEmail(req.body.signup_email);
      if (isTempEmail === true) {
        return done(null, false, { errors: 'Unable to use this email' });
      }
    });
   }
  )
);

每次isTempEmail 返回undefined,但如果我注销checkEmail(email) 末尾返回的是truefalse

我觉得我在混合回调和异步/等待功能,想知道我哪里出错了。

【问题讨论】:

    标签: javascript async-await passport.js


    【解决方案1】:

    目前您的checkEmail 函数不返回任何内容。而是:

    return fetch(url)
        .then(response => response.json())
        .then(async json => {
          let result;
          if (json.status === 200 && json.temporary === true) {
            result = true;
          } else {
            result = false;
          }
          return result;
        })
        .catch(async function(error) {
          console.log(`Error whilst checking email ${error}`);
        });
    

    这是因为你想将响应的结果返回给调用者。你不需要return await,因为那是多余的——async 函数总是会返回一个承诺。如果返回值不是一个承诺(例如你return await fetch(url)),它被包装在一个承诺中。在返回给调用者之前。所以return fetch(url) 就足够了。

    您甚至可以通过将您的 .then 调用转换为 awaits 并将其编写为同步方式来进一步简化此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-24
      • 2018-03-27
      • 2021-05-22
      • 2021-08-06
      • 2018-01-16
      • 2019-02-17
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多