2016-04-11 10 views
0

Hallo, ich bin neu zu Versprechungen und Rückrufe in Knoten js Ich mache etwas, um Benutzer Liste mit einer anderen Funktion mit Callbacks abrufen, aber immer scheitern. irgendwo fand ich Versprechungen zu verwenden. aber nie benutzt Versprechungen. kann mir jemand mit Code helfen?Wie verwenden Sie Rückruf oder Versprechen in Knoten js?

send_noti('12', function(res){ 

    console.log(res); 
}); 

function send_noti(value, callback){ 

    connection.query(" SELECT * from users ", function(err, res){ 

     callback(res); 
    }); 
} 
+0

'connection.query ("SELECT * von den Benutzern", Funktion (err, res) { if (err) { // Etwas } Rückruf (res); // wenn kein Fehler }); ' – Rayon

+0

nein, es funktioniert nicht mehr. – iam

Antwort

0

Sie nach etwas wie folgt aussehen:

function sendNotiAsync(value) { 
    return new Promise((resolve, reject) => // Promise constructor 
    connection.query("SELECT * from users", (err, data) => // Perform the action 
     err ? reject(err) : resolve(data))); // If error exists, reject, else resolve 
} 

Und es wie folgt verwenden:

sendNotiAsync(someValue) 
    .then(data => { 
    // Work with data here, for example 
    console.log(data); 
    }) 
    .catch(err => { 
    // Handle errors here 
    console.error(err); 
    }); 
0

In Knoten Rückrufe von Asynchron-Funktionen sollten immer die Unterschrift haben function(err, result /*,...*/)

Ihr Beispiel sollte wie folgt aussehen:

send_noti('12', function(err, res) { 
    if(!err) { 
    console.log(res); 
    } 
}); 

function send_noti(value, callback) { 
    connection.query(" SELECT * from users ", callback); 
} 

Darüber hinaus verwendet Ihr Beispiel keine Versprechen. Mit Versprechungen würde es so aussehen:

send_noti('12') 
    .then(function(res) { 
    console.dir(res) 
    }) 
    .catch(function(err) { 
    console.dir(err) 
    }) 

function send_noti(value, callback) { 
    return new Promise(function(resolve, reject) { 
    try { 
     connection.query(" SELECT * from users ", function(err, res) { 
     if (err) { 
      reject(err); 
     } else { 
      resolve(res); 
     } 
     }); 
    } catch (err) { 
     reject(err); 
    } 
    }) 
} 
+0

aber es scheint, dass connection.query(); nicht ausgeführt. bedeutet kein Ergebnis. keine Konsole. – iam

+0

@iam Ich habe einen _try-catch_-Block und 'console.dir' im' .catch'-Callback hinzugefügt, nun sollten Sie definitiv einen Fehler sehen, der Ihnen sagt, was schief gelaufen ist. –

Verwandte Themen