Ich fülle Daten in ein Array. Ich mache viele Anfragen an eine Datenbank im Postgreß und möchte das fertige Array an den Client beantworten. Das Problem ist, dass ich nicht erreichen kann, wenn das Benachrichtigungsfeld vollständig ist. Wie kann ich wissen, wann der Filter alle Wählaufrufe für db abgeschlossen hat?Aktion nach dem Filtern von Daten
result.filter(function(item){
//console.log(item.followed_by)
var query2 = 'SELECT user_id,action,date,element_refered FROM "notifications" WHERE user_id=' + "'"+ item.followed_by +"'"
dbp.sendDBRequest(query2,'blabla',function(results){
notifications.push(results)
console.log(notifications) //here has data
})
})
console.log(notifications) //here it doesnt have data
Ich habe versucht, mit dem Versprechen denken bt ich es falsch gemacht haben:
var p1 = new Promise(
function(resolve, reject) {
result.filter(function(item){
var query2 = 'SELECT user_id,action,date,element_refered FROM "notifications" WHERE user_id=' + "'"+ item.followed_by +"'"
dbp.sendDBRequest(query2,'blabla',function(results){
notifications.push(results)
})
})
resolve(notifications);
}
);
p1.then(
function(val) {
console.log(notifications)
})
.catch(
function(reason) {
console.log('Manejar promesa rechazada ('+reason+') aquí.');
});
bearbeiten Code:
Dies ist der Code mit dem Versprechen, aber ich habe dann nicht ein Filter (...) .das ist keine Funktion
var notifications = []
var query = 'SELECT followed_by FROM "relations" WHERE follower=' +"'"+32+"'"
dbp.sendDBRequest(query,'blabla', function(result) {
result.filter(function(item) {
return new Promise(function(resolve, reject) {
var query2 = 'SELECT user_id,action,date,element_refered FROM "notifications" WHERE user_id=' + "'" + item.followed_by + "'"
dbp.sendDBRequest(query2, 'blabla', function(results) {
notifications.push(results);
resolve(notifications);
})
})
.then(function(val) {
console.log(notifications)
})
.catch(function(reason) {
console.log('Manejar promesa rechazada (' + reason + ') aquí.');
});
})
.then(function(response){
var secondResponse = response + '2';
return response;
})
.then(function(secondResponse) {
//facultad
})
.catch(function(err){
console.log(err)
})
})
ok danke für die Antwort, es gibt TypeError: result.filter (...). Dann ist keine Funktion Ich habe den Code komplett – arnoldssss
Ah! mein Fehler. dann..Catch sollte nach Promise sein. Siehe den aktualisierten Code –
Ich bin mir nicht sicher, wie Sie Fehler in dieser SQL-Funktion behandeln, aber um in Catch-Blöcke fallen zu können, müssen Sie einen Fehler (Fehler) irgendwo in Hauptversprechen hinzufügen. –