if else 在循环中导致打字稿中的错误

太王

我有这个功能应该从用户那里获取推荐代码。用户给出一个代码,推荐代码检查它是否存在于数据库中,然后评估是否存在

  1. 它与当前用户不匹配,因此不应引用自己和

  2. 它与数据库中的代码之一匹配

但是,即使给定的代码在数据库中,此代码也无法找到匹配项。如果推荐代码与当前用户之一匹配,则它可以正常工作并指出即不能推荐自己。

但是,如果推荐代码与推荐系统应该如何工作的另一个用户的代码匹配,它仍然说不匹配。

我怎样才能消除这个错误

export const getID = functions.https.onCall(async(data, context) => {
  const db = admin.firestore();
  const usersSnapshot = await db.collection("user").get();
  const allUIDs = usersSnapshot.docs.map(doc => doc.data().userID);

  const userID = context.auth.uid;
  const providedID = "cNx7IuY6rZlR9mYSfb1hY7ROFY2";


 //db.collection("user").doc(providedID).collection("referrals").doc(userID);

  await check();

  function check() {
    let result;
    allUIDs.forEach(idFromDb => {
      if (providedID === idFromDb && (idFromDb === userID)) {
        result = "ownmatch";
      } else if (providedID === idFromDb && (idFromDb !== userID)) {
        result = "match";
      } else {
        result = "nomatch";
      }
    });
    return result;
  }

  if (check() === "match") {
    return {
      message: `Match Found`,
    };
  } else if (check() === "ownmatch") {
    return {
      message: `Sorry, you can't use your own invite code`,
    };
  } else {
    return {
      message: `No User with that ID`
    };
  }
});
戴夫牛顿

(这不是答案,而是简单的重构。)

这是您的代码当前正在执行的操作(粗略地说,我没有运行它):

const resultMsgs = {
  nomatch:  'No User With That ID',
  ownmatch: 'Sorry, you can\'t use your own invite code',
  match:    'Match Found',
}

function check(uids, providedId, userId) {
  let result

  uids.forEach(idFromDb => {
    if (providedId !== idFromDb) {
      result = 'nomatch'
      return
    }

    if (userID === idFromDb) {
      result = 'ownmatch'
      return
    }

    result = 'match'
  })

  return result
}

export const getID = functions
  .https
  .onCall(async (data, context) => {
    const userId     = context.auth.uid
    const providedId = 'cNx7IuY6rZlR9mYSfb1hY7ROFY2'

    const db   = admin.firestore()
    const user = await db.collection('user').get()
    const uids = user.docs.map(doc => doc.data().userId)

    const checkResult = check(uids, providedId, userId)
    return { message: resultMsgs[checkResult] }
  })

(我删除了看似虚假的数据库收集操作。)

forEach正在迭代所有uuids, 但result将设置为最后一次比较的任何内容。也许这是正确的,但是:

  • 如果您正在寻找任何匹配项,这不是您想要的。
  • 如果您正在寻找所有匹配项,这不是您想要的。
  • 如果您想匹配最后一个UUID,这就是您想要的,但这是一种奇怪的方法。

所以:

  • 如果您想要任何匹配项,请使用...咳咳任何形式的any函数。
  • 如果您想要所有匹配项,请使用任何形式的all函数。
  • 如果您想要第一个匹配项,则只需检查第一个元素。
  • 如果您想要完整的比较,那么您需要使用map而不是forEach,并适当地处理每个结果,无论在您的情况下意味着什么。

无论如何,我建议您更干净地分解您的代码。推理和修复会容易得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql中的if / else / else if /语句

来自分类Dev

在ifeach循环中以if else条件显示消息

来自分类Dev

Python中的while循环中的if / elif / else语句

来自分类Dev

for-else循环中的“ else”是否有相反的行为?

来自分类Dev

循环中的Codeigniter模板化(if / else if)

来自分类Dev

Java:在while循环中嵌套if / else语句

来自分类Dev

for循环中的if / else语句

来自分类Dev

((Java)if / else if / else循环后的返回语句?

来自分类Dev

if / else循环中的javascript变量声明

来自分类Dev

在执行if循环中的if else条件时,codebuild中出现错误

来自分类Dev

在跨列的for循环中运行if和else

来自分类Dev

for循环中if else和ifelse的行为差异

来自分类Dev

值错误(If..else循环)

来自分类Dev

如何避免for循环中的else语句?

来自分类Dev

IF ELSE循环中的按钮单击事件

来自分类Dev

在Foreach循环中正确使用If Else

来自分类Dev

if / else if / else错误-意外的标识符

来自分类Dev

循环中放置错误的else错误以打印质数

来自分类Dev

在循环中嵌套if和else语句

来自分类Dev

在UNIX中的FOR循环中使用IF ELSE语句

来自分类Dev

从while循环中消除if-else

来自分类Dev

((Java)if / else if / else循环后的返回语句?

来自分类Dev

(反应)JSX中的foreach循环中的if-else语句

来自分类Dev

vba-for循环中的if else语句

来自分类Dev

if else 在 pug 的循环中

来自分类Dev

何时需要循环中的 else 语句

来自分类Dev

速记 c if else 语句和 break 在循环中的组合使用导致错误

来自分类Dev

Else 语句无法在 while 循环中工作

来自分类Dev

在 for 循环中循环 else 语句?