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

时间:2021-02-18 10:02:38

标签: javascript html mongoose typeerror iterable

我有以下代码:

    //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);
    
    });

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

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

这很好用。但我想把整个第一个片段放到一个函数中,这样我就可以把它放在另一个文件中,将它导入到我的 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))

有人可以帮我吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

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

因此,解决方法是确保您的构造函数是您使用它的范围内的那个。

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