@Hellas

Как получить значения для каждого элемента в массиве?

Необходимо получить все теги и их данные:
tagsController.get = function(req, res, next) {
	tags.getTags(0, -1, function(err, tags) {
		if (err) {
			return next(err);
		}

		var data = {
			tags: tags,
			title: '#'
		};
		res.render('tags', data);
	});
};

Обращаемся к функции getTags и получаем теги, а также значения к каждому из них:
Tags.getTags = function(start, stop, callback) {
    db.getSetMembers('tags:id', function(err, tags) {
			if (err) {
				return callback(err);
			}

      // console.log(tags) = [ '1', '2', '3' ]
      
      tags.forEach(function(tag) {
        async.parallel({
          id: function(next) {
            db.getObjectField('tag:' + tag, 'id', next);
          },
          tagname: function(next) {
            db.getObjectField('tag:' + tag, 'tagname', next);
          },
          tagslug: function(next) {
            db.getObjectField('tag:' + tag, 'tagslug', next);
          }
        }, function (err, results) {
          if (err) {
            return callback(err);
          }

          callback(null, results);
        });
			});

		});
	};

В конечном итоге должно получиться примерно следующее:
"data.tags":[{"id":1,"tagname":"","tagslug":""},{"id":2,"tagname":"","tagslug":""},{"id":3,"tagname":"","tagslug":""}]

Но выдаёт ошибку Can't set headers after they are sent.
Как это сделать правильно?
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LiguidCool
По моему вы с async'ом накосячили. Разве колбек не сработает раньше, чем завершится foreach?
Кроме того вам же пишут, что нельзя отправить хедеры, если уже что-то ушло.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы