@Urukhayy

Как правильно форматировать массив в Node?

Задача: На Express приходит HTTP-запрос. Ответом должен быть отформатированный массив. Нужно сходить в Mongo, извлечь документы, и отформатировать их в новый массив, который будет возвращён. Но если использовать цикл for, то из-за асинхронности невозможно узнать, когда соберётся весь массив, стало быть и невозможно узнать, когда отправлять ответ. Сейчас я использую такую форму:
(function iterateItem(index) {
    // Форматирование и вставка элемента массива
    iterateItem(index + 1); // Переход ко второму элементу или, если элемент последний, отправка ответа в Express
})(0);

Что посоветуете?
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
@emp1re
После Mongo форматировать уже ничего не прийдется, если знаешь как с ней работать
А вообще твой вопрос не плох.
for example
function(req, res)

db.collection().exec((err,result)=>{
 let result = result.map(....)
res.send({result})
})


если про запрос к express тут вариантов ну очень много я люблю юзать async но также можно использовать promisse или даже обычный конструктор, да что тут и обычный callbaсk подойдет
function iterateItem (array, callback){
  var result = array.map(el=> return el+1)
  callback(result)
}
iterateItem(array, function(result){
  res.send(result)
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
crazy_leo
@crazy_leo
Frontend Developer
Array.prototype.asyncEach = function (each, done) {
  var i = -1, a = this
  function iter() {
    if (++i === a.length) { done && done(); return }
    each.call(a, a[i], iter)
  }
  iter()
}

// Example
;(new Array(10)).asyncEach(function (item, next) {
 setTimeout(function () {
   console.log("tick")
   next()
  }, 1000)
}, function () {
   console.log("done")
})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы