Я пытаюсь написать следующий код и заставить его работать синхронно, но единственная проблема в том, что он корректно работает с console.log
, который печатает каждый элемент в массиве с задержкой в 1 секунду, но не работает сследующая структура:
for (let i = 0; i < array.length; i++) {
setTimeout(function () {
1.http request via rp or request.get (I receive a huge data array)
2. .map results
3.insert to Mongo via mongoose
}
}
на данный момент у меня есть следующий код внутри:
request.get({url: array[i].url}), function (error, body) {
body.map(element => {
//do stuff, it works fine
});
collection.insertMany(body, function (err, docs) {
//#justloggerthings
}
Или у меня почти такая же версия с rp
вместо request.get
По умолчаниюУ меня mongoose.Promise = global.Promise;
Почему это вызывает проблемы?Потому что body.length
- это очень большой набор данных, который потребляет много оперативной памяти.(Теперь представьте 20+ массивов с insertMany
)
Итак, Монго пытается insertMany
сразу ответить на все ответы на запрос (когда они будут готовы, без задержки 1000 с).На самом деле, именно поэтому я выбираю request
вместо rp
(request-promise
), но это выглядит асинхронно.Поэтому я должен выбрать другой http get модуль из npm
и переключиться на него.И не беспокоиться об этом?
Или я должен обернуть эти операции, чтобы пообещать ||сделал асинхронную функцию и каждый раз вызывал ее в цикле (например, 1000 с), когда все правильно завершено.В этом случае единственное, что я нашел актуальным в StackOverflow, это:
Как вставить данные в монго синхронно (Nodejs, Express)
Бит, это немного устарело,Так есть идеи?