Взаимодействие между множественными ошибками кода может быть трудно предсказать и / или объяснить.Вот несколько обзоров:
if (json1[i] !== (json2[c]))
Записи в json1
и json2
являются объектами, созданными JSON.parse
.Это всегда разные объекты.Сравнение равенства значений их примитивных свойств потребуется для определения, содержат ли объекты одинаковые данные.
return nightmare
...
Это будет синхронно возвращать ожидающее обещание, возвращаемое then()
в конце цепочки обещаний, из функции, в которой выполняется этот код, поэтому тольковыполняется первая итерация цикла.Для завершения цикла ключевое слово return
необходимо удалить.
json2[c].push(json1[i]
в одном из обратных вызовов
имеет две проблемы:
a) он выполняется асинхронно.Если return
удаляется и цикл завершается, c
и i
равны длине json2
и json
соответственно и возвращают неопределенное значение, если используются в качестве индексов массива.Это проблема асинхронного программирования - см. Закрытие JavaScript внутри циклов - простой практический пример для решений.
b) json2[c]
- это простой объект, а не массив, поэтому он не 'у нас есть push
метод.Вы, вероятно, намеревались вставить значение в конец json2
, а не в запись в нем.
В цепочке обещаний кошмаров нет пункта
catch
.Необработанные ошибки отклонения обещания могут стать фатальными в будущем.
Примечание. У меня нет точной причины, по которой json2[c]
не определено во фрагменте кода - вы цитируете из фактического кода, а не урезанный пример опубликован?Я также предложил бы рассмотреть асинхронные функции и оператор await
как средство циклического выполнения асинхронных операций.