im пытается подсчитать, сколько людей из каждого пола есть в списке json, переданном клиентом с запросом POST (на сервере Node.js). У меня проблемы с асинхронизацией javascript, обратными вызовами и закрытием.Выполнить цикл запроса POST на сервере Node.js
Что я хочу: получить список от клиента, для каждой записи спросить мою коллекцию, если это утро, аф или аи, сосчитать, сколько фс, мс, и нам есть, отправить массив клиент с тремя значениями.
Я всегда получаю «Заголовки заданных наборов после их отправки» или подобные ошибки из-за выполнения асинхронного вызова. Я пробовал разные обратные вызовы и много разных вариантов.
Это как функционирует на сервере выглядит следующим образом:
app.post('/genderize', function(req, res){
createCounter("conto", req, function(req,contat){
count(req, contat);
}).then(res.send(result));
});
function createCounter(nome, req, callback) {
result = [0,0,0];
var contatore = function(){
var m = 0;
var f = 0;
var u = 0;
addM = function(){ console.log("m++ "+result[1]);result[1]++; };
addF = function(){ f++; };
addU = function(){ u++; };
getM = function(){ return this.m;};
getResult = function(){
console.log(result+ " * "+ getM() + " * " + this.u + " * "+ this.f);
return result;
};
return {
addM: addM,
addF: addF,
addU: addU,
getResult: getResult
};
}
callback(req, contatore());
}
function count(req, counter){
var collection = db.get('nomi');
var data = req.body.data;
data.forEach(function(value, i){
collection.find({ nome : req.body.data[i].name.split(" ")[0].toUpperCase() }, { fields: {_id:0, nome:0}}, function (err, docs) {
if (!isEmptyObject(docs)) {
docs = JSON.parse(JSON.stringify(docs));;
if(docs[0].sesso == "M"){
counter.addM();
} else {
counter.addF();
}
} else {
counter.addU();
}
});
});
}
Прежде всего, createCounter не является обещанием, поэтому вы должны удалить его. – chapinkapa
Можете ли вы вставить, как выглядит ваш JSON от клиента? – chapinkapa
Скрипт итерации через JSON без проблем, это не так. Должен ли я сделать обещание? перед тем, как поставить «then», я вызвал res.send как обратный вызов, но он не подождал –