2015-01-09 13 views
5

async.auto'da bir görevden diğerine giden sonuçların mantığıyla karıştırıldım. Mesela aşağıdaki kod mantığında ve finalTask arasındaki task1 modellerine bazı veriler ekledim ve task1 modellerine results.initialTask1 modellerinde de veriler eklenmiştir. Benzer şekilde task2 numaralı veri finalTask içinde results.initialTask1'da yansıtılmıştır. Async.auto'daki görevlerin sonuçları

results.task3[0]finalTask özdeş olduğundan, her results.initialTask1 bölgesinin results.task1[0], results.task2[0] Özetle. Bu async.auto mantığı mı? Veya task1 modellerinde hangi değişikliklere neden olursa olsun C++ işaretçisi tarafından referans gibi bir şey, o da initialTask modellerinde yansıtır?

async.auto({ 
    initialTask: function(callback) { 
     //Do some operations 
     callback(null, name, initialModels); 
    }, 
    task1: ['initialTask', function(callback, results) { 
     var models = results.initialTask[1]; 
     //Add some more data to models 
     callback(null, models); 
    }], 
    task2: ['initialTask', function(callback, results) { 
     var models = results.initialTask[1]; 
     //Add some more data to models 
     callback(null, models); 
    }], 
    task3: ['initialTask', function(callback, results) { 
     var models = results.initialTask[1]; 
     //Add some more data to models 
     callback(null, models); 
    }], 
    finalTask: ['task1', 'task2', 'task3', function(callback, results) { 
     //Here the followings are the same: results.initialTask[1], results.task1[0], results.task2[0], results.task3[0]        
    }] 
}); 

Mantık olduğundan emin olmam için bana yardımcı olan herhangi bir cevabı arıyorum. Her hangi bir resmi belge aramıyorum ya da ...

+0

bana o mantık ya da değil emin olmasına yardımcı olur herhangi bir cevap arıyorum? Her hangi bir resmi evrakı aramam ya da ... –

+0

geri bildirimi ilk argüman ya da sonuç olacak, belgelere göre, sonuçlar ilk parametredir – Abhijeet

cevap

6

Bu beklenen bir davranıştır. Temel olarak async.auto tüm fonksiyonları gerekli gördüğü sırayla yürütür. Yani senin durumunda initialTask ilk çağrılacak. Sonra task1, task2 ve task3 paralel olarak çağrılacaktır. Sonunda finalTask sonuçlarla çağrılacak. Tüm değerlerin aynı olmasının nedeni, JavaScript'in call-by-sharing ile ilgili olması, yani bir işlev parametresinin kendisini değiştirirseniz, parametreye gönderilen öğeyi etkilemeyeceği anlamına gelir. Parametrenin iç yapısını değiştirirseniz, öğeye kadar taşıyacaktır.

Daha fazla bilgi here.

0

async.auto sahip .it uyumsuz Lib tarafından sağlanan işlev çok kullanışlı ve güçlü 3 alanları 1 görev 2- eşzamanlılık

Async.auto olarak, her fonksiyonu bağlıdır 3-geri onun ilk işlev dışında ebeveyn işlevi, herhangi bir işlev yürütme sırasında herhangi bir hata alırsa.Onların çocuk işlevini ya da söyleyin .. onların aşağı-tanımlı işlevleri daha idam edilmeyecek, geri arama ile bir hata ortaya çıkar ve ana geri arama hemen geri dönecektir Hata

1- Görev: - Bir Nesne 2- Eşzamanlılık: - İsteğe Bağlı Paralel olarak çalıştırılabilecek maksimum görev sayısını belirlemek için tamsayı. Varsayılan olarak, olabildiğince fazla. 3- geri arama: - return yanıtı

exapmle-

AnyService.prototype.forgetPassword = function (res, email, isMobile, callback) { 
    Logger.info("In AnyService service forgetPassword email...", email); 
    db.User.findOne({ 
     email: email.toLowerCase(), 
     deleted: false 
    }, function (err, user) { 
     if (!user) { 
      configurationHolder.responseHandler(res, null, configurationHolder.LoginMessage.registerFirst, true, 403) 
     } else { 
      async.auto({ 
       token: function (next, results) { 
        return gereratePasswordToken(next, email, user, isMobile); 
       }, 
       sendMail: ['token', function (next, result) { 
        return SendMailService.prototype.forgetPasswordMail(next, result.token, email, user.fullName); 
        }] 
      }, function (err, result) { 
       if (err == null && result != null) { 
        configurationHolder.ResponseUtil.responseHandler(res, null,  configurationHolder.LoginMessage.forgotPassword, false, 200) 
       } else { 
        callback(new Error(configurationHolder.errorMessage.oops)) 
       } 
      }) 
     } 
    }); 
    } 
İlgili konular