【问题标题】:TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) JavaScriptTypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) JavaScript
【发布时间】:2021-05-21 06:24:25
【问题描述】:

我有以下代码:

    //creates matrix and converts it to JSON file
    var map = JSON.stringify(math.randomInt([10, 10],2));

    //create instance of Map
    const temp= new Map({_id: 2, map: map});
    temp.save(function (err) {
        if (err) return handleError(err);
    
    });

这将创建一个矩阵并将其放入 Map 集合中的我的 mongoDB 中,使用以下模型:

const mapSchema = new mongoose.Schema({ 
    _id: Number,
    map: Array
})
  
const Map = mongoose.model('Map', mapSchema)

这很好用。但我想把整个第一个 sn-p 放到一个函数中,所以我可以把它放在另一个文件中,将它导入到我的 index.js 中,然后运行这个函数。所以我在它周围放了一个函数,像这样:

const generateMap = function() {
    var map = JSON.stringify(math.randomInt([10, 10],2));

    const temp = new Map({_id: 2, map: map});
    temp.save(function (err) {
        if (err) return handleError(err);
    
    });
    
};

我将函数导出到我的 index.js 文件并在那里运行该函数,但出现错误:

const temp= new Map({_id: 2, map: map});
             ^

TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))

有人可以帮我解决这个问题吗?

非常感谢

【问题讨论】:

    标签: javascript html mongoose typeerror iterable


    【解决方案1】:

    在出现错误的情况下,您无意中使用了 JavaScript 的标准 Map 构造函数,而不是您自己的 Map 构造函数。如果您将参数传递给 JavaScript 的 Map 构造函数,则该参数必须是可迭代的。

    所以解决方法是确保你的构造函数是你使用它的范围内的那个。

    强烈建议不要命名事物,以免它们与 JavaScript 标准库中的事物发生冲突。也许考虑调用您的构造函数XYZMap,其中XYZ 可以识别它在您的架构中的含义。这样您就不会发生名称冲突,并且当您没有它在范围内时,您会得到一个更明显的错误。 (错误是ReferenceError: XYZMap is not defined,希望能更清楚地说明发生了什么。)

    【讨论】:

    • 非常感谢。这就是问题所在。我是 JS 新手,不知道命名约定。
    猜你喜欢
    • 2020-11-06
    • 2020-12-14
    • 1970-01-01
    • 2021-10-22
    • 2019-08-13
    • 2021-01-10
    • 2020-12-02
    • 1970-01-01
    • 2022-07-09
    相关资源
    最近更新 更多