2011-08-05 33 views
18

Tôi đã sử dụng caolan's async module rất tốt, tuy nhiên theo dõi lỗi và cách chuyển dữ liệu khác nhau qua luồng kiểm soát khiến cho việc phát triển đôi khi rất khó khăn.Mô-đun luồng điều khiển tốt nhất cho node.js là gì?

Tôi muốn biết nếu có bất kỳ tùy chọn nào tốt hơn hoặc những gì hiện đang được sử dụng trong môi trường sản xuất.

Cảm ơn bạn đã đọc.

+0

Những lỗi theo dõi bạn đang đề cập đến, cụ thể? –

Trả lời

17

Tôi cũng sử dụng async. Để giúp theo dõi lỗi, bạn nên đặt tên cho các chức năng của mình thay vì tải vô số chức năng ẩn danh:

async.series([ 
    function doSomething() {...}, 
    function doSomethingElse() {...}, 
    function finish() {...} 
]); 

Bằng cách này, bạn sẽ nhận được nhiều thông tin hữu ích hơn trong ngăn xếp ngăn xếp.

+0

Cảm ơn, điều này đã giúp. Bạn có biết bất kỳ người nào khác tốt không? –

+0

Một số khác mà tôi đã sử dụng là [Step] (https://github.com/creationix/step) khá tốt. Tôi nghĩ rằng async có nhiều tùy chọn hơn có thể phù hợp hơn với các tình huống khác nhau. – evilcelery

-1

Đôi khi rất khó để đặt tất cả các hàm trong một mảng. Khi bạn có một mảng các đối tượng và muốn làm một cái gì đó cho mỗi đối tượng, tôi sử dụng một cái gì đó giống như ví dụ dưới đây.

đọc thêm ở: http://coppieters.blogspot.be/2013/03/iterator-for-async-nodejs-operations.html

var list = [1, 2, 3, 4, 5]; 
var sum = 0; 

Application.each(list, function forEachNumber(done) { 
    sum += this; 

    // next statement most often called as callback in an async operation 
    // file, network or database stuff 

    done(); // pass an error if something went wrong and automatically end here 

}, function whenDone(err) { 
    if (err) 
    console.log("error: " + err); 
    else 
    console.log("sum = " + sum); 

}); 

Tôi đặt tên cho các chức năng, bởi vì nó là dễ dàng hơn để gỡ lỗi (và dễ đọc hơn)

3

... Tuy nhiên theo dõi lỗi và cách khác nhau truyền dữ liệu qua cho luồng điều khiển khiến cho việc phát triển đôi khi rất khó khăn.

Tôi vừa mới tạo ra một khái niệm trừu tượng đơn giản có tên là "wait.for" để gọi chức năng async trong chế độ đồng bộ hóa (dựa trên sợi): https://github.com/luciotato/waitfor

Sử dụng wait.for, bạn có thể sử dụng 'try/catch 'trong khi vẫn gọi chức năng async, và bạn giữ phạm vi chức năng (không cần đóng cửa). Ví dụ:

function inAFiber(param){ 
    try{ 
    var data= wait.for(fs.readFile,'someFile'); //async function 
    var result = wait.for(doSomethingElse,data,param); //another async function 
    otherFunction(result); 
    } 
    catch(e) { 
    //here you catch if some of the "waited.for" 
    // async functions returned "err" in callback 
    // or if otherFunction throws 
}; 

xem các ví dụ tại https://github.com/luciotato/waitfor

+0

Thanh lịch. Sợi hy sinh một chút tính di động. Nhưng đây là một trong những [giải pháp] có thể đọc được nhất (https://github.com/joyent/node/wiki/modules#user-content-wiki-async-flow) Tôi đã thấy, không cần một bộ xử lý trước . Lam tôt lăm! – joeytwiddle

Các vấn đề liên quan