Ich benutze Angular2 und Meteor. Ich habe eine Ausnahme (Maximum Call-Stack-Größe überschritt) in meiner Chrome-Konsole, da ich diesen Code in meiner Client-Seite hinzugefügt:Maximale Call-Stack-Größe überschritten mit 2 Collection.find
var userChannelsId = UserChannels.find({idUser: Meteor.userId()});
this.channels = Channels.find({_id: {$in: userChannelsId}});
Von dem, was ich gefunden, diese Ausnahme tritt auf, wenn eine Endlosschleife ist. Ich bin sicher, dass der Fehler von diesen Zeilen kommt (ich habe meinen Code debuggt, bis ich sicher war). Kommt das Problem von der Tatsache, dass die erste Suche nicht beendet ist, wenn die zweite beginnt?
Alle Funktion:
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]);
});
}
EDIT:
Als @MichaelSolati habe ich versucht, nur die IdChannel des userChannel zu bekommen, aber ich habe immer noch die gleichen Fehler ... Es gibt einen beobachtbaren und nicht eine Anordnung. Vielleicht ist es das Problem? Dies ist, was ich getan habe:
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]); });
}
Verwenden Sie 'setTimeout (function() {// Ihr Code hier}, 0})' zu vermeiden Call Stack Größe überschritten Problem –
Was muss ich in die Funktion einfügen? All mein getChannelList-Code oder nur meine Collection.find? –
Sie müssen Ihren unendlichen Code in die Callback-Funktion 'setTimeout' setzen –