[Xin hướng dẫn] Sử dụng Promies trong NodeJS



  • Chào các bạn.
    Mình gọi câu lệnh .save(funtion())... thì chương trình báo rằng nên phải sử dụng Promies. Mình cũng có tìm đọc qua về Promies nhưng vẫn chưa hiểu lắm. Hiểu là dùng nó để tránh hiện tượng viết các callback lồng nhau, nhưng mình mới code về JS nên còn nhiều bỡ ngỡ. Các bác có thể chỉ sơ qua mấy ví dụ cụ thể được không?
    Cảm ơn các bạn nhiều :D :D :D



  • .save().then(function() {
    return Promise.resolve(true);
    }, catch (ex) {
    return Promise.reject(false);
    }

    mình hay viết kiểu này



  • Đọc thấy phải dùng thư viện Promies là BlueBird gì cơ mà bác :) Ý là mình muốn mấy ví dụ demo về sử dung Promies để tránh việc viết các callback lồng nhau ấy :D



  • Bạn phải hiểu Promise là 1 cách viết chứ ko phải là thư viện, tất nhiên xài thư viện hỗ trợ thì code sẽ rõ rầng dễ hiểu hơn, promise thì theo mình hiểu là lấy kết quả function trước để xài tiếp cho đoạn code thiếp theo, vd:

    query.User(ID).then(function(results) {
    return deleteUser(results).then(function() {
    return deleteFilesByName(results.avatar).then(function() {
    return Promise.resolve(true);
    } catch (ex) {
    return Promise.reject(false);
    };
    });
    });;
    ở đây mình lấy 1 User ra bằng id trả về cho mình 1 object "resullts" sau đó lấy lấy "results làm giá trị đầu vào cho hàm delete và lấy avatar trong "results" làm đầu vào hàm deleteFilesByName. khi tất cả các tiến trình này lần lượt thực hiện xang nhiệm vụ của mình thì mình trả nó về bằng true. vậy thôi



  • Mình cũng mới dùng Promise bằng Q Promise.

    https://github.com/kriskowal/q

    Tất cả các ví dụ tham khảo đều có trong link, nhiều lúc không biết nó chạy như nào debug mãi mới ra xD



  • Mình đọc thấy có bài viết bảo là thằng 'bluebird' là thư viện tốt nhất để viết Promies :D



  • Các bạn tham khảo tài liệu promise ở đây
    https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

    Mình dùng promise khi mình muốn thực thi lệnh hay tập lệnh bất đồng bộ kết quả không trược trả về ngay tức thời. Mà chúng ta chỉ biết được kết quả (có thể success hay fail thông qua resolve hay reject)

    Ví dụ đơn giản của promise:

    var p1 = new Promise(function (resolve, reject) {
      jQuery.get('http://hostname/data/config.json', function( data ) {
        resolve(data);
      })
    });
    
    //
    p1.then(function(dataReturnedByResolve) {
    });
    

    Đôi khi dùng promise thì code của mình có thể dài hơn. Đa số các JS Lib viết sau này đều dùng Promise.

    Trong đặc tả của ES6 đã có promise, Hầu hết cái JS runtime mới như firefox, chrome, safari, node 4+ đều đã support promise.
    Bluebird là lib implement Promise có thể chạy trên ES5. Bluebrid cũng add thêm vài chức năng.

    papa elf

    0


  • Nên sử dụng bluebird để bọc các callback lại ngoài ra sử dụng Promise.all() của bluebird chạy song song rất nhanh nhé =))



  • Nhanh ak bạn? Sao mình thấy người ta nói là sẽ lâu chứ vì nó sẽ đồng bộ tất cả các hàm? Mình chưa hiểu lắm.



  • Promises là cơ chế bất đồng bộ nhé



  • Sao mình cảm thấy khó hiểu quá :D Tự học vất vả thế :D



  • nên kiếm 1 người có thể trao đổi trực tiếp, thế sẽ tiến bộ nhanh hơn ^^



  • Uhm lúc mình mới học thì cũng thấy khó hiểu lắm,

    Nếu bạn k hiểu được, thì bạn cứ dùng callback đi,

    Cho đến một lúc nào đó, bạn thấy sao code mình rối thế, làm sao để improve đây, rồi lúc đó bạn sẽ nghĩ đến việc dùng Promise.

    Lúc đó bạn sẽ tự khắc hiểu ra được thui.

    Đó là cách học của mình, rất khó quên.

    Đây là một bài viết của mình, dùng Jquery. Căn bản nó cũng là Promise thui.

    https://daynhauhoc.com/t/su-dung-jquery-deferred-de-thuc-thi-tuan-tu-nhung-tac-vu-bat-dong-bo/30767

    Promise là mô hình lập trình có từ những năm 1970 rùi. ahjhj

    Nhưng nó vẫn mới mẻ với mình lúc mình học nó.



  • This post is deleted!


  • @Bui-Minh-Phong p đọc thêm bài này của @Lê-Mạnh-Hùng nhé, rất hay và bổ ích đấy
    https://nodejs.vn/topic/15/promise-async-thì-sao-nào



  • Hi @Bui-Minh-Phong .

    Nếu bạn muốn tìm hiểu kỹ về Promise thì bạn nên đọc cái ni nì :)
    https://github.com/getify/You-Dont-Know-JS/blob/master/async %26 performance/ch3.md

    Trong quyển này nó nói rất rõ cho bạn biết Promise là gì và phải sử dụng như thế nào cho đúng.


Log in to reply