Process nextTick là gì? Tôi sẽ chứng minh đẳng cấp NẾU không sử dụng nó thì sẽ có thể sập Server ?

  Рет қаралды 3,269

Tips Javascript

Tips Javascript

Күн бұрын

Пікірлер: 5
@tuho6192
@tuho6192 Жыл бұрын
well, đúng lúc em đang tìm hiểu, cảm ơn anh nhaaaa
@anonystick
@anonystick Жыл бұрын
Có duyên hen!
@quanls2509
@quanls2509 Жыл бұрын
Theo như ví dụ của anh thì là process.nextTick chạy trước Promise. Nhưng theo em thì là process.nextTick chạy trước .then của Promise. Em thử với ví dụ ở dưới thí kết quả là new Promise((res, rej) => { console.log('resolve'); res(); }).then(() => console.log('then')) process.nextTick(() => console.log("nextTick")) Ngoài ra em có thử với ví dụ dưới thì kết quả lại là process.nextTick(() => console.log("nextTick 1")) new Promise((res, rej) => { console.log('resolve'); res(); }).then(() => console.log('then')) process.nextTick(() => { console.log("nextTick 2") }) Với 2 ví dụ này thì callback trong new Promise sẽ được execute trước process.nextTick chứ ạ. Mong anh giải đáp ạ
@nhatminhnguyenquang7965
@nhatminhnguyenquang7965 Жыл бұрын
Để nói về vấn đề của bạn mình xin phép trình bày dựa trên những kiến thức mình có. Khi bạn sử dụng promise rõ hơn là new Promise((res, rej) => { // code execute in call stack res() }).then(...) Thì phần code nằm trong block chứa comment của mình nó thực hiện synchronous ở trong call stack, còn sau khi gọi hàm res() rồi then thì nó đã được add vào queue dùng để lưu trữ các task thuộc micro task. Cho nên anh Tips nói chạy sau Promise ở đây là khi Promise thực hiện "lời hứa" là cái then của bạn đó. Còn về phần process.nextTick mình nghĩ bạn nên hiểu nó như thế này. Khi mà event loop thực hiện một vòng gọi các task từ các queue (micro, macro) hết 1 vòng thì gọi là tick. process.nextTick tạo ra một "kho chứa" các task mà các task này sẽ thực hiện sau khi cái tick ở đây đã thực hiện full trip và thực hiện trước khi event loop bắt đầu thực hiện tick mới. Vì thế nên process.nextTick thực hiện trước promise. Để được đầy đủ thông tin mời bàn vào: nodejs.dev/en/learn/understanding-processnexttick/ để đọc rõ hơn hỉ. Nếu em giải thích sai mong mọi người góp ý để em được học hỏi hơn ạ
@quanls2509
@quanls2509 Жыл бұрын
​@@nhatminhnguyenquang7965 Mấy hôm rồi mình có tìm hiểu qua. Về lý thuyết thì nextTickQueue sẽ execute callback khi mà 1 operation được kết thúc. Operation ở đây mình đang hiểu là bất cứ action nào của hệ thống, ví dụ khi một promise fullfillment và micro task queue execute callback của .then(). Nhưng khi thực tế mình tìm hiểu và có test thử thì khi run node với type="commonjs" được define trong package.json thì process.nextTick sẽ luôn chạy trước promise. Còn với type="module" (ES Module) thì promise.then sẽ được execute trước process.nextTick. Ngoài ra khi run ở type commonjs, promise queue (micro task queue) chỉ được execute khi nextTickQueue clean. Bất cứ khi nào trong nextTickQueue được add thêm callback thì process.nextTick sẽ execute trước. Khi run với type ES Module, thì mình chưa tìm được tài liệu nào nói rõ ràng về sự khác nhau giữa 2 type. Nhưng có 1 vài idea là vì khi run node ở type ES Module thì global() hay là script ở main stack sẽ là async. Cái này mình vẫn đang tìm hiểu thêm Bạn có thể thử với ví dụ của mình ở dưới đây với 2 kiểu type được define trong package.json. ``` process.nextTick(() => console.log("nextTick 1")) new Promise((res, rej) => { console.log('resolve'); res(); }).then(() => console.log('then')) process.nextTick(() => { console.log("nextTick 2") process.nextTick(() => console.log("nextTick 3")) }) ``` Anh​ @anonystick giúp em correct nếu em sai với ạ :D
Ouch.. 🤕⚽️
00:25
Celine Dept
Рет қаралды 21 МЛН
Synyptas 4 | Арамызда бір сатқын бар ! | 4 Bolim
17:24
Help Me Celebrate! 😍🙏
00:35
Alan Chikin Chow
Рет қаралды 90 МЛН
setImmediate and process.nextTick
4:11
Zain Ejaz
Рет қаралды 13 М.
Event loop trong javascript là gì?
17:09
Ông Dev
Рет қаралды 39 М.