【问题标题】:Cannot read property 'Symbol(Symbol.iterator)' of undefined无法读取未定义的属性 'Symbol(Symbol.iterator)'
【发布时间】:2017-11-03 21:19:20
【问题描述】:

我正在尝试遍历一个数组以检查它是否包含通过指定函数的任何项目。我通过向 Array 对象添加一个 .any() 原型来做到这一点:

Array.prototype.any = (comparator) => {
    for(let item of this){
        if(comparator(item)){
            return true;
        }
    }
    return false;
};

然后像这样调用 Array.any():

else if(users && users.any((user) => user.userName === user.userName)){
        res.status(400).send('Username already in use');
}

然而,这给了我以下错误:

TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
at Array.any (C:\dev\nodejs\testproject\dist\routes\userRoutes.js:29:39)
at C:\dev\nodejs\testproject\dist\routes\userRoutes.js:87:56
at Query.<anonymous> (C:\dev\nodejs\testproject\node_modules\mongoose\lib\model.js:3748:16)
at C:\dev\nodejs\testproject\node_modules\kareem\index.js:277:21
at C:\dev\nodejs\testproject\node_modules\kareem\index.js:131:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)

在我看来,错误提示原型函数中的“this”未定义,但“this”是我检查未定义的用户数组。

不确定是什么导致了问题,希望您能提供帮助。

【问题讨论】:

  • 什么是“用户”?它似乎不是一个数组,而是来自 mongoose 的 Query 对象。我认为你做了类似var users = User.find({}) 的事情。是吗?
  • user.userName === user.userName: 你真的是这个意思吗?
  • 你可能是正确的这里“用户”确实来自猫鼬
  • 另外,你不能用Array.prototype.some()吗?
  • @IdsvanderZee 请将其添加为answer 然后,而不是通过编辑您的问题 - 这完全使错误消息无效。

标签: javascript arrays node.js mongoose


【解决方案1】:

这里唯一的答案是你没有使用“功能”,所以你的“这个”不是你的“用户”。这会起作用:

Array.prototype.any = function(comparator) {
    for(let item of this){
        if(comparator(item)){
            return true;
        }
    }
    return false;
};

然后,当然,只需使用“some”。

【讨论】:

    【解决方案2】:

    使用 Array.prototype.any() 是不必要的,因为我使用 mongoose 来获取用户,所以我将其更改为让 mongoose 尝试获取具有指定用户名的单个用户并检查是否已定义。喜欢:

    const checkUniqueUserName = (user, res, done) => {
        User.findOne({"userName": user.userName}, (err, foundUser) => {
            if(err){
                res.sendStatus(500);
                console.log(err);
            }
    
            else if(foundUser){
                res.status(400).send('Username already in use');
            }
    
            else{
                done(user);
            }
        });
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2017-06-20
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多