Chóng mặt việc xử lý đồng bộ rồi callback :(



  • Đại loại em có 1 kịch bản code:

    // Get All right
    function getRights(callback) {
        var list = {};
        rightModel.distinct('project', function (err, projects) {
            for(var i = 0; i < projects.length; i++) {
                (function (i) {
                    list[projects[i]] = {};
                    rightModel.distinct('group', function (err, groups) {
                        var count = 0;
                        for(var j = 0; j < groups.length; j++) {
                            (function (j, count) {
                                rightModel.find(function (err, items) {
                                    list[projects[i]][groups[j]] = items;
                                    count ++;
                                    if(count == groups.length) {
                                        if(typeof(callback) == 'function') {
                                            callback(list);
                                        }
                                    }
                                }, {'project': projects[i], 'group': groups[j]});
                            })(j, count);
                        }
                    }, {'project': projects[i]});
                }(i));
            }
        });
    };
    

    Công việc của nó dùng để:

    1. Connect DB lấy tất cả các project rồi lặp để:
      1.1. Connect DB Lấy ta tất cả các group thuộc từng project để:
      1.1.1. Connect DB để lấy tất cả các item ra theo từng group.

    => Và cuối cùng là đổ nó vào 1 list rồi dùng callback trả về cho 1 ứng dụng khác xử lý.

    Mình thấy chóng mặt và thấy code k hề trực quan chút nào vì lắm vòng quá :(.
    Hiện em xử lý thế nào đã oke về mặt yêu cầu nhưng kỹ thuật code thì vẫn quá vấn đề.
    Các pro nào có kinh nghiệm xin chỉ giáo với ạ.

    • Format code trên forum chỗ nào hả các bác, mò k thấy :)


    • Đầu tiên bạn hãy nghiên cứu Markdown để format lại đoạn code trên.
    • Bạn xem trường hợp bạn đang gặp có phải Callback hell k thì có thể dùng Promise để refactor.
    • Có phải đang thiết kế DB theo tư duy của SQL ? ( Project, Group, Item ... )

Log in to reply