Может ли кто-нибудь попытаться объяснить мне, почему оператор «Если» позволил ему пройти, но ясно, что вы можете видеть, что свойство моего объекта говорит «СУЩЕСТВУЕТ», даже если он говорит, что он разрешает только «НОВЫЙ».
var newChannalChecker = false;
singleMassiveGroup.forEach(singleGrop => {
if (!newChannalChecker && singleGrop.length) {
singleGrop.forEach(element => {
if (element["currentItemStatus"] === "NEW") {
newChannalChecker = true;
}
});
}
});
Я не уверен, что это поможет, но я попытался добавить к нему несколько журналов, чтобы проверить, что происходит
var newChannalChecker = false;
singleMassiveGroup.forEach(singleGroup => {
if (!newChannalChecker && singleGroup.length) {
// singleGrop.filter(e => e.CurrentItemStatus === "NEW").map(e)
singleGroup.forEach(element1 => {
console.info("CurrentItemStatus: ", element1.CurrentItemStatus);
if (element1.CurrentItemStatus === "NEW") {
console.info(
"Entered CurrentItemStatus: ",
element1.CurrentItemStatus
);
newChannalChecker = true;
}
});
}
});
App.js:402 CurrentItemStatus: EXISTING
Странно то, что в значении указано «СУЩЕСТВУЕТ», но оно все еще находится внутри if
Я попытался навести указатель мыши на свойство, в котором говорится, что "Element1 не определен"
Еще одна вещь, которую я заметил, console.info внутри моего оператора «If» ничего не печатает, но все же меняет newChannalChecker на True.
Я думаю, нам нужно больше контекста. Совершенно невозможно, чтобы этот конкретный объект прошел проверку if
. Но это внутри цикла, внутри другого цикла, и если любой объектов, проверенных в этом двойном цикле, имеет свойство currentItemStatus
, установленное на "NEW"
, то newChannalChecker
в конечном итоге будет true
. Так что я не уверен в том, что дает вам уверенность в том, что происходит что-то странное. Было бы полезно знать остальные ваши данные.
Я предполагаю, что вы могли видеть всплывающее окно значений элемента для ранее повторяемого элемента. Добавьте журнал консоли в if?
иногда инструменты разработчика не всегда синхронизируются с фактическими данными или отображают обновленные данные. у меня недавно было "странное" поведение, но затем выяснил, что его инструменты разработки показывают мне другие данные, чем я ожидал
на всякий случай: вы уверены, что позиция исполнения действительна? иногда исходная карта заставляет инструменты разработчика выделять неправильную строку как текущую (а фактическая строка находится на 1-2-3 позиции выше выделенной)
Я добавил дополнительную информацию, чтобы помочь решить эту проблему. Дай мне знать, если хочешь, чтобы я что-нибудь попробовал
Хорошо, то, что вы видите, слишком странно. Я согласен с @skyboyer - похоже, что отладчик неправильно синхронизирован с источником. В другом комментарии вы сказали, что console.info
внутри if
не выполнялся, поэтому я предполагаю, что это означает, что тело if
не было выполнено. Для большей уверенности вы можете присвоить значение element1.CurrentItemStatus === "NEW"
переменной перед if
, затем распечатать его, а затем выполнить if (resultFromComparison)
. Если он говорит, что вам не следует заходить в if
, и вы не получаете внутренний журнал, то это проблема отладчика.
Я пробовал проверить статус в конце, и если я просто основывался на результатах консоли, console.info ("Checker", newChannalChecker); печатает false (это то, что я хочу). Похоже (и надеюсь) это просто проблема с отладчиком. Я впервые столкнулся с подобной проблемой с отладчиком.
Я видел похожие проблемы с chrome devtools,
сделать одно дело
console.info(element["currentItemStatus"]
внутри блока if,
он должен дать вам правильное значение. Это будет не только NEW
не обязательно верно. console.info
иногда обновляет журнал после его регистрации.
это часть pring entered
?
Я пробовал этот console.info («CurrentItemStatus:», element1.CurrentItemStatus); и консоль вернет "CurrentItemStatus: EXISTING"
консоль вошла внутрь, если напечатала то же самое?
console.info( "Entered CurrentItemStatus: ", element1.CurrentItemStatus );
Я пробовал, но он ничего не печатал в консоли, но когда я его отлаживал, он устанавливает для newChannalChecker значение true
если console.info внутри if
не запускается, значит, он работает правильно
поднять ошибку для инструментов chrome dev
Я не вижу здесь никаких проблем. Пока вы наводите курсор на элемент отладки, значение element["currentItemStatus"]
должно быть "EXISTING"
, установленным откуда-то еще.
Инструмент отладчика показывает ценность этого. Инструмент отладчика показывает последнее обновленное значение переменной.
Этот простой тест удовлетворит вас, как работает инструмент отладчика.
let abc = 1;
abc = 5;
debugger;
Наведите указатель мыши на abc
в let abc
, и вы увидите, что его значение равно 5, а не 1.
Вот еще один тест с использованием условия if:
let nn = 1;
if (nn===1) { // hover here in nn, you'll see 'Nope!', but not 1
console.info('test passed'); // in fact, the condition is matched nn === 1
}
nn = 'Nope!';
debugger;
Подсказка: откройте инструмент разработчика, а затем запустите приведенный выше фрагмент кода.
У меня нет параллельного кода, вот в чем проблема
OP говорит, что нет другого потока, который запускает код. Как элемент может быть изменен некоторым кодом Другие, когда единственный код, который должен выполняться в данный момент, находится в этом if
и вокруг него?
Вы упомянули в своем предыдущем комментарии, что где-то в моем коде я устанавливаю CurrentItemStatus, но дело в том, что это единственный запущенный код на данный момент, я планировал вызвать API после того, как это свойство было проверено
@vlaz это невозможно. без изменения инструмент отладчика не будет отображать EXISTING
. Нет ИИ: P
Он печатает "тест пройден"
Да, это то, что ожидалось.
просто вещи javascript ... это новый.