Я пытался отладить кусок кода в течение нескольких часов, ударив головой о стену и, наконец, определил свои проблемы в месте в коде, где назначается результаты вызова collection.findOne() для переменной дают мне разные данные, чем то, что я вижу с помощью console.log() того же findOne() в предыдущей строке.meteor minimongo получение непоследовательности collection.findOne() results
prePostState = function(thisStID) {
console.log(Students.findOne({_id:thisStID}));
var stTemp = Students.findOne({_id:thisStID});
console.log(stTmp);
var testsTemp = stTmp.tests;
Объект коллекции имеет массив 'tests'. В этом случае массив содержит 3 объекта в качестве своих элементов.
Хотя и console.log() линия вернуть что-то вроде этого
Object {_id: "eXf9dqQbaemKS24Ti", name: "Student,Name", group: "none", site: "SiteName", tests: Array[3]}
расширяющегося каждый показывает различные данные. Первый показывает правильные тесты: Array [3], второй показывает тесты: Array [1], а один элемент в этом массиве также имеет данные, которые отличаются от соответствующего элемента в полном массиве.
---- Обновление ----
Выполнение некоторых дополнительных испытаний, я немного изменил код.
prePostState = function(thisStID) {
console.log(Students.find({_id:thisStID}).fetch()); //1
var stTmp = Students.find({_id:thisStID}).fetch();
console.log(stTmp); //2
console.log(stTmp[0].tests.length); //3
for(var i = 0; i < stTmp[0].tests.length; i++) {
console.log(stTmp[0].tests[i]); //4
}
1 Возвращает:
[Object]
0: Object
_id: "AqLHB8hT8GxzQ7zyD"
group: "none"
name: "Student,Name"
site: "SiteName"
tests: Array[3]
2 Возвращает:
[Object]
0: Object
_id: "AqLHB8hT8GxzQ7zyD"
group: "none"
name: "Student,Name"
site: "SiteName"
tests: Array[1]
3 Возвращает:
3
В течение цикла на 4-повторов в три раза и печатает каждую из три объекта в массиве тестов.
Очевидно, это означает, что я могу получить доступ к необходимым мне данным. Вместо
var testArray = stTmp.tests;
Который оставляет меня с массивом только один элемент, я просто должен получить длину stTmp.tests, а затем использовать цикл для доступа к каждому элементу по индексу и вставить их в переменная testArray.
Так что я могу продолжить, но я до сих пор не понимаю поведение, которое я вижу. Я нахожусь на небольшом сроке, чтобы продолжать продвигаться на этом этапе, но когда у меня есть время, я могу вернуться к этому и попытаться воспроизвести его в метеораде или другой форме, с которой я могу поделиться полным кодом.
Я также попытался вар stTemp = Students.find ({_ id.thisStID}) выборки(); и подумал, что на минуту он вернул правильные данные, но после нескольких вызовов Student.update() он возвращал те же незавершенные/устаревшие данные. – soisystems
Опубликовать MeteorPad или поделиться репо, ваш вопрос слишком расплывчатый, и я вижу опечатки на ваших консольных журналах. –
Вы уверены, что они на самом деле разные, и это не просто пульт браузера ведет себя странно? В chrome, если вы идете 'x = {a: {}}', 'console.log (x)', 'xab = 5' и только затем расширяете вывод' console.log', тогда вы увидите 'b' 5, хотя он не был установлен во время 'console.log'.Попытка изменить ваш код на 'console.log (JSON.stringify (...))' вместо просто 'console.log (...)'. – user3374348