Ich lerne Knoten und verspricht. Ich habe mein Problem vereinfacht und meinen Code unten geteilt.asynchrone Codierung mit Versprechen
Ich habe drei Module: app.js, modLanguage.js und model.js
app.js:
var l = require('../test/modLanguage.js');
var params = [{
p0: 'johnDoe',
p1: '12345',
p2: 0
}];
var lang = l.call(params);
console.log("Needs to run last: " + lang.language);
modLanguage.js:
var call = function(params) {
var langQuery = require('../test/model.js');
var userLang = createLanguage();
userLang.setLanguage('FRENCH');
console.log("This needs to run first - setting lang French before DB dip: " + userLang.language);
var myData = langQuery.getLanguage(params)
// My DB dip
.then(function(data) {
var data = JSON.parse(JSON.stringify(data[0]));
userLang.setLanguage(data[0].Language);
console.log("Needs to run second - DB dip brought language ENG: " + userLang.language);
return userLang;
})
.catch(function(err) {
console.log('error');
});
return userLang;
}
module.exports.call = call;
function createLanguage() {
return {
language: this.language,
setLanguage: function(language) {
this.language = language;
return this.language;
}
}
}
model.js ist ein einfaches Modul, das params verwendet, eine gespeicherte Prozedur ausführt und Daten durch Rückgabe eines Versprechens zurückbringt.
Ich möchte die Ausführung von Code an app.js blockieren, bis das Objekt aus den Daten gegen Datenbank Dip initialisiert wird. Doch wie ist die console.log zeigt:
Dies muss zuerst ausgeführt werden - Einstellung lang Französisch vor DB dip: FRENCH
Needs laufen zuletzt: FRENCH
Needs an zweiter Stelle laufen - DB Dip gebracht Sprache ENG: ENG
Was ich will, erreichen, ist offensichtlich:
Dies muss zuerst ausgeführt werden - Einstellung lang Französisch vor DB dip: FRENCH
Needs an zweiter Stelle laufen - DB Dip gebracht Sprache ENG: ENG
Needs zuletzt laufen: ENG
Bitte, Beratung die Veränderungen, die ich machen muss, um das zu erreichen?
Sie benötigen ein Versprechen zurückzukehren, von 'call' wenn Sie darauf warten wollen in' app.js' ... und verwenden '.then' in' app.js' weil Sie im Moment Promises nicht richtig verwenden –