Я пишу функцию проверки, где я хочу проверить, действителен ли массив для установки. Я хочу вернуть несколько ошибок. Я искал эту тему, но не смог ее запустить с обещаниями, асинхронным модулем. Im очень новичок в NodeJS и был бы очень благодарен, если бы вы могли мне помочь.NodeJs: Подождите, пока функция ForEach
function validateNewResultUnits(sets, req) {
var validate = [];
sets.forEach(function(setItem) {
setItem.forEach(function(item) {
if (item.hasOwnProperty("name") == false) {
validate.push({
'name': 'Name has to be set'
});
} else {
if (item.name === "" || item.name === null || item.name === undefined) {
validate.push({
'name': 'Name cannot be empty'
});
} else {
Exercise.forge({
name: req.body.name
}).fetch({
withRelated: [{
'resultUnits': function(qb) {
qb.where('name', item.name);
}
}]
}).then(function(exercise) {
console.log("Länge:" + exercise.related('resultUnits').length);
if (exercise.related('resultUnits').length === 0)
validate.push({
'name': 'ResultUnit not found'
});
}).catch(function(error) {
validate.push({
'name': 'An Error occured'
});
});
}
}
if (item.hasOwnProperty("value") == false) {
validate.push({
'value': 'Value has to be set'
});
} else {
if (item.value === "" || item.value === null || item.value === undefined) {
validate.push({
'value': 'Name cannot be empty'
});
} else {
if (isNaN(item.value)) validate.push({
'value': 'Value has to be number'
});
}
}
});
});
return validate;
}
var validate = validateNewResultUnits(req.body.sets, req);
console.log(validate);
if (validate.length == 0) {
// ...
}
console.log(validate);
возвращение неопределенное перед функцией готово вернуть что-то. Большое спасибо.
EDIT: Promise Покушение (внутри второго Foreach)
var promise = new Promise(function(resolve) {
Exercise.forge({name: req.body.name })
.fetch({
withRelated: [{'resultUnits': function(qb) {
qb.where('name',item.name)
}}]
}).then(function(exercise) {
console.log("Länge:"+exercise.related('resultUnits').length);
if (exercise.related('resultUnits').length === 0)
resolve({'name':'ResultUnit not found'});
}).catch(function(error) { resolve({'name': 'An Error occured'}); });
});
promise.then(function(result) {
validate.push(result);
});
Так что, если я использую Блюберд сделать '' Exercise.forge ... обещая функция будет синхронизироваться? – orgertot
Он не будет синхронизироваться, но он вернет обещание вызывающему, и вызывающий может присоединить '.then (function() {...})', который будет вызываться, когда обещание будет устранено или отклонено , примерно так: '' var prom = asyncFetch(); prom.then (функция success (result) {}, function error (error) {}); '' – mkinawy
Если вы используете nodejs, вам не нужна синяя птица для базового обещания, она уже включена. – Shanoor