Проблема в том, что ваш .getJSON
асинхронен, работает в синхронном коде, это неплохо, но обрабатывается немного иначе.
В дизайне Node.js используется event-l oop для обеспечения асинхронности на однопоточном языке, таком как JavaScript.
Таким образом, ваш обратный вызов фактически не будет вызываться, пока .getJSON()
не завершится.
https://jsfiddle.net/uva5o10d/
Посмотрите здесь, я сделал вам пример, чтобы продемонстрировать, что я имею в виду, я просто заполняю массив значениями (все единицы для этого примера) и устанавливаю функцию обратного вызова с помощью setTimeout ( это задерживается на 1 с), однако обратите внимание, программа продолжит работу. (Event-l oop)
В нижней части файла обратите внимание на test()
, это вызывает текущую версию (очень похожую), включая вызов более продолжительного задания, например получение данных из API.
Закомментируйте test()
и раскомментируйте working()
, и вы увидите другое, вы можете использовать console.log(value + " " + oke)
внутри своего .getJSON
, чтобы получить результаты, которые вы ищет.
Также примечание, forEach
, вероятно, будет лучшим методом для итерации по массиву, если вам не нужен обратно преобразованный массив (map
).
Я приложил некоторые ресурсы, которые, я думаю, могут оказаться полезными: