javascript - 2 Collection.find 超出了最大调用堆栈大小

标签 javascript mongodb angular meteor

我正在使用 Angular2 和 Meteor。自从我在客户端添加该代码以来,我的 Chrome 控制台出现异常(超出最大调用堆栈大小):

var userChannelsId = UserChannels.find({idUser: Meteor.userId()});
this.channels = Channels.find({_id: {$in: userChannelsId}});

据我所知,当存在无限循环时会出现此异常。我确信错误来自这一行(我调试了我的代码直到我确定)。 问题是否来自于第二次开始时第一次搜索尚未完成?

所有功能:

getChannelList(): void {
    console.log('ok');
    var userChannelsId = UserChannels.find({idUser: Meteor.userId()});
    this.channels = Channels.find({_id: {$in: userChannelsId}});
    console.log('ko');

    this.channels.subscribe(channel => {
        this.selectChannel(channel[0]);
    });
} 

编辑:

作为@MichaelSolati,我尝试仅获取 userChannel 的 IdChannel,但我仍然遇到相同的错误......它返回一个可观察的值,而不是一个数组。也许这就是问题所在?这就是我所做的:

getChannelList(): void {
    console.log('ok');
    let userId = Meteor.userId();
    var userChannelsId = UserChannels.find({idUser: userId});
    var values = userChannelsId.map((userChannels:Array<UserChannel>) => {
        let result:Array<String> = [];
        if (userChannels) {
            userChannels.forEach((userChan) => {
                result.push(userChan.idChannel);
            });
        }
        return result;
    });
    this.channels = Channels.find({_id: {$in: values}});
    console.log('ko');
    this.channels.subscribe(channel => { this.selectChannel(channel[0]); });
}

最佳答案

由于使用 MeteorRxJS 进行查询而更新。虽然它可能并不完美,但它可能会让您走上正确的道路。

private userChannelsSub: Subscription;

getChannelList(): void {
    console.log('ok');
    let userId = Meteor.userId():
    let this.userChannelsSub = UserChannels.find({idUser: userId}).subscribe((userChannels: any[]) => {
        if (Array.isArray(userChannels)) {
            let userChannelsId = userChannels.map((channel: any) => { return channel._id; });
            if (this.channels) { this.channels.unsubscribe(); }
            this.channels = Channels.find({_id: {$in: userChannelsId}}).subscribe((channels: any[]) => {
                this.selectChannel(channels[0]); 
            });
        }
    });
    console.log('ko');
} 

关于javascript - 2 Collection.find 超出了最大调用堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476209/

相关文章:

javascript - 将 slider 更改为选择框

php - Javascript PHP模板系统

javascript - mongodb 保存在嵌套对象(node.js)应用程序中

angular - 从路由器 URL 获取 ID

javascript - (() => {}) 而不是 JavaScript 函数表达式

javascript - 数组中的项目无法识别。 - 杰斯

javascript - 对 MongoDB 的重复 Node.js 请求最终会变慢

java - 解析 JSON 并指定投影时的 com.mongodb.util.JSON.parse 限制

java - 如何处理时区来计算滞后

javascript - 如何获取 Angular 中可见元素的连续索引并忽略隐藏元素 *ngFor 的索引?