私はノードと約束を学んでいます。私は私の問題を単純化し、私のコードを以下に共有しました。 app.js、modLanguage.jsと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は、paramsを使用し、ストアドプロシージャを実行し、約束を返してデータを戻す単純なモジュールです。
データベースdipから返されたデータからオブジェクトが初期化されるまで、app.jsでコードの実行をブロックします。しかし、であるとして、にconsole.logは示しています
これは、最初に実行する必要がある - DBのディップ前にLANGフランス語を設定する:最後に実行するFRENCH
必要があります。第二に実行するFRENCH
ニーズ - DBディップもたらした言語ENG:ENG
は何を達成したいことは明らかである:
これは、最初に実行する必要がある - DBのディップ前にLANGフランス語を設定する:第二に実行するFRENCH
ニーズ - DBディップもたらした言語ENG:ENG
ニーズを最後に実行する:ENG
してください、アドバイスそれを達成するために必要な変更は?
あなたが約束を正しく使用していない瞬間に –