nodeの非同期は操作のpromiseを処理します.


nodejsは渋滞していません.前と後の二つの機能のコードモジュールを完成します.必ずしも最初のコードモジュールが完成してから、第二のコードモジュールが実行されるとは限りません.しかし、多くの場合、二つのコードの実行順序を制御しなければなりません.promiseは非同期操作の順序をよくコントロールできます.彼は非同期動作が完了したらコールバック関数を実行することによって実現されます.
 
使い方
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を実行します.