nodeの非同期は操作のpromiseを処理します.
nodejsは渋滞していません.前と後の二つの機能のコードモジュールを完成します.必ずしも最初のコードモジュールが完成してから、第二のコードモジュールが実行されるとは限りません.しかし、多くの場合、二つのコードの実行順序を制御しなければなりません.promiseは非同期操作の順序をよくコントロールできます.彼は非同期動作が完了したらコールバック関数を実行することによって実現されます.
使い方
package.jsonに参加します.
必要なファイルにモジュールを導入する
resolive(newPractice.uid)//実行に成功したら値を返します.複数の値があれば、一つのオブジェクトに戻ります.
insertPracticeForGraphics実行が完了したら、@1 newPractieIdのみを実行します.insertPracticeForGraphacce戻り値です.
関数3の前に関数1、2の実行が必要であれば、関数1、2の実行順序はこのように制御することができます.
startを実行すると、udateCourses Attr OnPathを3回実行します.着信パラメータはそれぞれ「path_」です.0''path_1''path_2'
彼らが実行した順番は不明ですが、彼らが実行した帰りの値は順番が決まっています.それぞれdata_uに対応します.0,data_1,data_2.start実行完了後、@2を実行します.
使い方
package.jsonに参加します.
'promise':"*"
実行 npm install プロミスモジュールをロード必要なファイルにモジュールを導入する
var Promise = require("promise");
例 function insertPracticeForGraphics (){
var self = this;
return new Promise(function (resolve) {
var newPractice = new Practice(practice);
newPractice.save(function () {
console.log("save practice success");
resolve(newPractice._id);// ,
});
}
insertPracticeForGraphics()
.then(function(newPractieId){ // @1
})
resolive(newPractice.uid)//実行に成功したら値を返します.複数の値があれば、一つのオブジェクトに戻ります.
insertPracticeForGraphics実行が完了したら、@1 newPractieIdのみを実行します.insertPracticeForGraphacce戻り値です.
関数3の前に関数1、2の実行が必要であれば、関数1、2の実行順序はこのように制御することができます.
function Course() {
}
Course.prototype = {
start: function() {
var assignInfo = ['path_0','path_1','path_2']
var promises = [];
var self = this;
_(assignInfo).each(function(item) {
var promise = self.updateCoursesAttrOnPath(item);
promises.push(promise);
});
return Promise.all(promises);
},
updateCoursesAttrOnPath: function (item) {
Path.update({id_name: item.id_name},{$set:{:courses:item.courses}}}, function (err) {
if (err) {
throw err;
}
resolve(item.courses);
}
}
var course = new Course()
course.start()
.then(function(data_0,data_1,data_2){ //@2
})
startを実行すると、udateCourses Attr OnPathを3回実行します.着信パラメータはそれぞれ「path_」です.0''path_1''path_2'
彼らが実行した順番は不明ですが、彼らが実行した帰りの値は順番が決まっています.それぞれdata_uに対応します.0,data_1,data_2.start実行完了後、@2を実行します.