From 7252040dff34d89b1370a36a478423cdda686e33 Mon Sep 17 00:00:00 2001 From: MartinsYong Date: Wed, 17 Jul 2019 14:35:00 +0800 Subject: [PATCH 1/4] sync with upstream: 8365ea7 --- 1-js/11-async/07-microtask-queue/article.md | 125 ++++-------------- .../07-microtask-queue/promiseQueue.png | Bin 13547 -> 14286 bytes .../07-microtask-queue/promiseQueue@2x.png | Bin 34500 -> 36360 bytes 3 files changed, 23 insertions(+), 102 deletions(-) diff --git a/1-js/11-async/07-microtask-queue/article.md b/1-js/11-async/07-microtask-queue/article.md index 6faf08e085..72b5b35c46 100644 --- a/1-js/11-async/07-microtask-queue/article.md +++ b/1-js/11-async/07-microtask-queue/article.md @@ -1,9 +1,9 @@ -# Microtasks 和事件循环 +# 微任务(Microtasks) Promise 的处理程序(handlers)`.then`、`.catch` 和 `.finally` 都是异步的。 -即便一个 promise 立即被 resolve,`.then`、`.catch` 和 `.finally` **下面**的代码也会在这些处理程序之前被执行。 +即便一个 promise 立即被 resolve,`.then`、`.catch` 和 `.finally` *下面*的代码也会在这些处理程序之前被执行。 示例代码如下: @@ -21,9 +21,9 @@ alert("code finished"); // 该警告框会首先弹出 为什么 `.then` 会在之后被触发?这是怎么回事? -## Microtasks(微任务) +## 微任务队列(Microtasks queue) -异步任务需要适当的管理。为此,JavaScript 标准指定了一个内部队列 `PromiseJobs`,通常被称为 “microtask 队列”(v8 术语)。 +异步任务需要适当的管理。为此,JavaScript 标准规定了一个内部队列 `PromiseJobs`,通常被称为 “微任务队列”(v8 术语)。 如[规范](https://tc39.github.io/ecma262/#sec-jobs-and-job-queues)中所述: @@ -52,78 +52,6 @@ Promise.resolve() 现在代码就是按照预期执行的。 -## 事件循环 - -浏览器内的 JavaScript 以及 Node.js 的执行流程都是基于**事件循环**的。 - -“事件循环”是引擎休眠并等待事件的过程。只有当事件发生时才会处理它们,然后重新进入休眠状态。 - -事件可能来自外部,例如用户操作,或者也可能来自于内部任务的结束信号。 - -例如下面的事件: -- `mousemove`,用户移动了他们的鼠标。 -- `setTimeout` 处理程序将被调用。 -- 一个外部的 `