2015-01-09 19 views
5

Tôi là loại nhầm lẫn với logic của các kết quả đi từ một nhiệm vụ đến nhiệm vụ khác trong async.auto. Ví dụ trong logic mã sau đây tôi đã thêm một số dữ liệu vào các mô hình trong task1, ban đầu là đầu ra từ initialtask và trong finalTask đã thêm dữ liệu vào các kiểu từ task1 cũng được phản ánh trong results.initialTask1. Dữ liệu được thêm tương tự trong task2 được phản ánh trong results.initialTask1 trong finalTask.Kết quả của các tác vụ trong async.auto

Tóm lại tất cả các results.initialTask1, results.task1[0], results.task2[0], results.task3[0] là giống hệt nhau trong finalTask. Đây có phải là logic của async.auto không? Hoặc nó là một cái gì đó giống như tài liệu tham khảo của con trỏ trong C + + mà nguyên nhân bất cứ thay đổi cho các mô hình trong task1, nó phản ánh trong các mô hình trong initialTask là tốt?

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]        
    }] 
}); 

Tôi đang tìm bất kỳ câu trả lời nào giúp tôi đảm bảo đó là logic hay không? Tôi không nhất thiết phải tìm kiếm bất kỳ tài liệu chính thức nào hoặc ...

+0

Tôi đang tìm câu trả lời nào đó giúp tôi chắc chắn rằng đó là logic hay không? Tôi không nhất thiết phải tìm kiếm bất kỳ tài liệu chính thức nào hoặc ... –

+0

sẽ gọi lại là đối số hoặc kết quả đầu tiên, theo tài liệu, kết quả là tham số đầu tiên – Abhijeet

Trả lời

6

Đây là hành vi được mong đợi. Về cơ bản, async.auto sẽ thực hiện tất cả các chức năng theo thứ tự mà nó cho là cần thiết. Vì vậy, trong trường hợp của bạn initialTask sẽ được gọi đầu tiên. Sau đó, task1, task2task3 sẽ được gọi song song. Cuối cùng, finalTask sẽ được gọi với kết quả. Lý do tất cả các giá trị giống nhau liên quan đến JavaScript call-by-sharing, có nghĩa là nếu bạn thay đổi một tham số chức năng, thì nó sẽ không ảnh hưởng đến mục được đưa vào tham số. Nếu bạn thay đổi các thông số bên trong của thông số, nó sẽ mang đến mục đó.

Thông tin thêm here.

0

async.auto là rất hữu ích và mạnh mẽ chức năng được cung cấp bởi Async Lib .it có 3 lĩnh vực 1 nhiệm vụ 2- đồng thời 3-callback

Trong Async.auto, Mỗi chức năng phụ thuộc vào nó chức năng cha mẹ ngoại trừ chức năng đầu tiên, nếu bất kỳ chức năng nào sẽ nhận được bất kỳ lỗi nào trong quá trình thực thi .về chức năng con của chúng hoặc nói .. chức năng được xác định bên dưới của chúng sẽ không được thực hiện thêm nữa, lỗi sẽ xảy ra với gọi lại và cuộc gọi lại chính sẽ quay trở lại ngay lập tức một lỗi

1- Tác vụ: - một đối tượng 2- đồng thời: - Một tùy chọn số nguyên để xác định số lượng tác vụ tối đa có thể chạy song song. Theo mặc định, càng nhiều càng tốt. 3 callback: - trả lại phản ứng

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)) 
       } 
      }) 
     } 
    }); 
    } 
Các vấn đề liên quan