vấn đề callback?



  • Mình có new 1 model User

    var newuser = new User({
    username : req.body.username,
    password : req.body.password
    });

    User.createUser(newuser,function(err,newuser){
    if(err) throw err;
    });

    với hàm tạo user trong model

    module.exports.createUser = function(newuser,callback){
    newuser.save(callback);
    };

    //*
    console.log(newuser._id) //* theo các bạn nó đưa ra log cái id ko?

    Bạn nào giải thích giùm mình cái call back với?



  • @Nhật-Nguyễn log có in ra id

    callback = function(err,user){
    ...
    }
    

    mà đây là cái vấn đề gì vậy ?



  • callback là function dc truyền vào để xử lý sau khi xong 1 nhiệm vụ (bất đồng bộ). ví dụ bạn có 1 nhiệm vụ cần thực hiện và tốn nhìu time, sau khi thực hiện nhiệm vụ xong bạn muốn thực hiện tiếp 1 nhiệm vụ khác (phải đảm bảo nhiệm vụ 1 xong mới thực hiện nhiệm vụ 2.) lúc này ta dùng callback.

    • newuser là 1 thể hiện của model User,
    • newuser.save() thực hiện nv lưu User.
    • callback là function dc thực hiện ngay khi lưu User xong. trong nodejs thì người ta thiết kết function callback theo kiểu error first. Tức là tham số đầu tiên sẽ chứa lỗi nếu function mẹ có lỗi. Nghĩa là trong quá trình save, nếu xảy ra lỗi sẽ dc trả về thông qua tham số thứ nhất của hàm callback. Tham số thứ 2 sẽ trả về record dc lưu nếu thành công. nên khi trả về nó có thêm ID


  • Còn tùy bạn để cái dòng console.log ở đâu, dùng như thế nào? Câu hỏi của bạn chưa được rõ ràng lắm.

    Theo như mình hiểu thì cái trường ._id là trường do DB sinh ra chứ bạn không tạo nó trong constructor của User (thường thì là thế). Mà nếu theo như trường hợp này thì dòng

    console.log(newUser._id)
    

    bạn phải đặt trong định nghĩa hàm callback thì nó mới in ra được. Vì hàm này được gọi sau khi thao tác save với DB được hoàn tất. Lúc đó thì object newuser mới có trường _.id.

    Đây là mình trả lời theo cách hiểu của mình thôi :D.
    Bạn cung cấp thêm thông tin về vấn đề bạn đang gặp phải thì có lẽ sẽ có câu trả lời tốt hơn :D



  • Ý kiến của mình giống với bạn @thelonglqd còn tuỳ vào vị trí bạn để console.log thì kết quả in ra sẽ khác nhau. Như code của bạn viết thì khi run sẽ in ra undefined vì _id là do mongodb create, lúc này _id chưa tồn tại trong newuser.


Log in to reply