Callback và Promise trong Async Function



  • Theo mình biết thì muốn get giá trị từ 1 Async function thì minh có thể dùng callback or Promise? vậy theo các bác, cái nào tốt cho performance hơn? MÌnh đang lơ mơ 2 cái này



  • cả hai cái đề được nha bạn,

    Callback thì khi mà bạn gọi nhiều hàm cùng lúc, nhìn khá rối rắm.

    Chính vì vậy người ta sinh ra Promise.

    Về performance thì chắc chắn là Promise sẽ chậm hơn một tí tị tì ty rùi.

    Nhưng cái tí tị tỳ ti này thì tuyệt đối không thành vấn đề. Vì đổi lại code của bạn sẽ dễ đọc hơn.



  • trong tương lai ES7 sẽ chính thứ hỗ trợ async / await, cho nên node hiện giờ đang thích ứng dần dần với cách viết này

    1. Callback: cái này thì ai cũng đã quen thuộc, dùng nhiều sẽ dẫn tới tình trạng callback hell
    2. Promise: code trong sáng hơn 1 xíu, có điều vẫn sẽ xa lạ với nhưng bạn code quen với các ngôn ngữ Java/C#/Python, vì các callback sẽ được sắp xếp lại thành 1 chain of functions:
    // declare 
    let func1 = (params) => {
       return PromiseObject; 
    }
    
    // exec 
    func1(params).then((res1) => {
       console.log(res1); 
    }).catch((err) => {
      console.error(err);
    }) 
    
    1. async / await: cách sắp xếp code sẽ tương tự với code trong java, C#, python nên dễ nhìn/đọc. Nhược điểm của dùng async/await (theo ý kiến cá nhân) là ban phải nhớ khai await mỗi khi execute, còn nếu không result trả về sẽ là 1 promise, nếu hàm chạy lồng vào nhau sẽ khó debug
    try {
      let func1 = async (params) => {
        return PromiseObject 
      }
      let res1 = await func1(params); 
      console.log (res1); 
    } catch (err) {
      console.error(err);
    }
    

Log in to reply