Bất đồng bộ trong nodejs
Chào các bác, e là newbie về nodejs nói riêng và lập trình bất đồng bộ nói chung, e chưa có kinh nghiệm mấy về xử lý bất đồng bộ. Bác nào giúp e vấn đề này với ạ.
[Khai báo mảng X]
getDB1(....., function(callback)
{
[Thêm phần tử vào mảng X]
});
getDB2(....., function(callback)
{
[Thêm phần tử vào mảng X]
});
res.render('index', {X...});
Vì trước giờ e code theo tư duy tuần tự nên như e tìm hiểu thì dùng module async để ép đoạn code trên thành đồng bộ, vậy có cách nào xử lý đoạn code trên theo tư duy bất đồng bộ ko ạ ?
Kiểu như render index đầu tiên, trong lúc đang getDB thìtrang index hiện ra thanh loading, getDB xong thì hiện giá trị mảng X ra index.
Hoặc cách nào tối ưu nhất để xử lý 1 số lượng lớn request. Tks all
mình chắc là nodejs cũng như js, mình nói khái niệm async của js nhé.
var longTime = getHttpRequest(‘url’);
rõ ràng để get url thì phụ thuộc vào tốc độ mạng, thời gian xử lý các kiểu sẽ mất 1 khoảng thời gian, nên getHttpRequest sẽ chạy bất đồng bộ.
Để xử lý việc này họ thêm 1 callback vào sau hàm
getHttpRequest(‘url’, function(data){/* todo: work with data */});
giờ người ta chuộng dùng Promise thay cho callback nhưng ý tưởng cũng tương tự.
longTime.then(data => {return data2}).then(data2 => return data2).then… //es6
Thích chấm đến bao giờ thì “.then” đến bao giờ thì “chấm”. Lưu ý, callback cũng gọi liên tục được như vậy nhưng do nó lồng vào hàm nên nhìn nó xấu, ngta gọi là callback hell. Cá nhân mình thấy Promise cũng có Promise hell.
Với những thứ đã trình bày thì mỗi lần “.then” bạn thay đoạn “todo” = đoạn push thêm vào array là được.
cách nào tối ưu hiệu suất cho hệ thống lớn hơn vậy bác ?
Người ta đang dùng Promise bạn ạ và có nhiều lib hỗ trợ/cải tiến promise.
Async ở es7, đang kiểu “beta”, mình k dám nói nhiều vì cũng k biết nhiều.
Mình rất tiếc là không lưu lại mấy video về promise hồi mình mới đọc, trong đó có 1 video rất hay đưa ra được cả vấn đề và từng bước giải quyết vấn đề đó với Promise, đi từ cơ bản Promise lên đến tối ưu sao cho chạy ổn nhất.