diff options
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/promise/index.html')
| -rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/promise/index.html | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/promise/index.html b/files/zh-cn/web/javascript/reference/global_objects/promise/index.html index 3dd832b401..31420f60c5 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/promise/index.html +++ b/files/zh-cn/web/javascript/reference/global_objects/promise/index.html @@ -46,7 +46,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise <p>我们可以用 <code>promise.then()</code>,<code>promise.catch()</code> 和 <code>promise.finally()</code> 这些方法将进一步的操作与一个变为已敲定状态的 promise 关联起来。这些方法还会返回一个新生成的 promise 对象,这个对象可以被非强制性的用来做链式调用,就像这样:</p> -<pre class="notranslate">const myPromise = +<pre>const myPromise = (new Promise(myExecutorFunc)) .then(handleFulfilledA,handleRejectedA) .then(handleFulfilledB,handleRejectedB) @@ -65,7 +65,7 @@ const myPromise = <p>这两个函数的签名很简单,它们只接受一个任意类型的参数。这些函数由您(编程者)编写。这些函数的终止状态决定着链式调用中下一个promise的"已敲定 (settled)"状态是什么。任何不是 <code>throw</code> 的终止都会创建一个"已决议(resolved)"状态,而以 <code>throw</code> 终止则会创建一个"已拒绝"状态。</p> -<pre class="notranslate">handleFulfilled(value) { /*...*/; return nextValue; } +<pre>handleFulfilled(value) { /*...*/; return nextValue; } handleRejection(reason) { /*...*/; throw nextReason; } handleRejection(reason) { /*...*/; return nextValue; }</pre> @@ -75,21 +75,21 @@ handleRejection(reason) { /*...*/; return nextValue; }</pre> <p>链式调用中的 promise 们就像俄罗斯套娃一样,是嵌套起来的,但又像是一个栈,每个都必须从顶端被弹出。链式调用中的第一个 promise 是嵌套最深的一个,也将是第一个被弹出的。</p> -<pre class="notranslate">(promise D, (promise C, (promise B, (promise A) ) ) )</pre> +<pre>(promise D, (promise C, (promise B, (promise A) ) ) )</pre> <p>当存在一个 <code>nextValue</code> 是 promise 时,就会出现一种动态的替换效果。<code>return</code> 会导致一个 promise 被弹出,但这个 <code>nextValue</code> promise 则会被推入被弹出 promise 原来的位置。对于上面所示的嵌套场景,假设与 "promise B" 相关的 <code>.then()</code> 返回了一个值为 "promise X" 的 <code>nextValue</code> 。那么嵌套的结果看起来就会是这样:</p> -<pre class="notranslate">(promise D, (promise C, (promise X) ) )</pre> +<pre>(promise D, (promise C, (promise X) ) )</pre> <p>一个 promise 可能会参与不止一次的嵌套。对于下面的代码,<code>promiseA</code> 向"已敲定"("settled")状态的过渡会导致两个实例的 <code>.then</code> 都被调用。</p> -<pre class="notranslate">const promiseA = new Promise(myExecutorFunc); +<pre>const promiseA = new Promise(myExecutorFunc); const promiseB = promiseA.then(handleFulfilled1, handleRejected1); const promiseC = promiseA.then(handleFulfilled2, handleRejected2); </pre> <p>一个已经处于"已敲定"("settled")状态的 promise 也可以接收操作。在那种情况下,(如果没有问题的话,)这个操作会被作为第一个异步操作被执行。注意,所有的 promise 都一定是异步的。因此,一个已经处于"已敲定"("settled")状态的 promise 中的操作只有 promise 链式调用的栈被清空了和一个事件循环过去了之后才会被执行。这种效果跟 <code>setTimeout(action, 10)</code> 特别相似。</p> -<pre class="notranslate">const promiseA = new Promise( (resolutionFunc,rejectionFunc) => { +<pre>const promiseA = new Promise( (resolutionFunc,rejectionFunc) => { resolutionFunc(777); }); // 这时,"promiseA" 已经被敲定了。 @@ -155,7 +155,7 @@ console.log("immediate logging"); <p><code>Promise</code> 对象是由关键字 <code>new</code> 及其构造函数来创建的。该构造函数会把一个叫做“处理器函数”(executor function)的函数作为它的参数。这个“处理器函数”接受两个函数——<code>resolve</code> 和 <code>reject</code> ——作为其参数。当异步任务顺利完成且返回结果值时,会调用 <code>resolve</code> 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用<code>reject</code> 函数。</p> -<pre class="brush: js notranslate">const myFirstPromise = new Promise((resolve, reject) => { +<pre class="brush: js">const myFirstPromise = new Promise((resolve, reject) => { // ?做一些异步操作,最终会调用下面两者之一: // // resolve(someValue); // fulfilled @@ -165,7 +165,7 @@ console.log("immediate logging"); <p>想要某个函数拥有promise功能,只需让其返回一个promise即可。</p> -<pre class="brush: js notranslate">function myAsyncFunction(url) { +<pre class="brush: js">function myAsyncFunction(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open("GET", url); @@ -179,7 +179,7 @@ console.log("immediate logging"); <h3 id="基础示例">基础示例</h3> -<pre class="brush: js notranslate">let myFirstPromise = new Promise(function(resolve, reject){ +<pre class="brush: js">let myFirstPromise = new Promise(function(resolve, reject){ //当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...) //在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法. setTimeout(function(){ @@ -196,7 +196,7 @@ myFirstPromise.then(function(successMessage){ <h3 id="高级示例">高级示例</h3> -<pre class="brush: html hidden notranslate"><button id="btn">Make a promise!</button> +<pre class="brush: html hidden"><button id="btn">Make a promise!</button> <div id="log"></div> </pre> @@ -204,7 +204,7 @@ myFirstPromise.then(function(successMessage){ <p>Promise 的值的填充过程都被日志记录(logged)下来,这些日志信息展示了方法中的同步代码和异步代码是如何通过Promise完成解耦的。</p> -<pre class="brush: js notranslate">'use strict'; +<pre class="brush: js">'use strict'; var promiseCount = 0; function testPromise() { @@ -247,7 +247,7 @@ function testPromise() { ') Promise made (<small>同步代码结束</small>)<br/>'); }</pre> -<pre class="brush:js hidden notranslate">if ("Promise" in window) { +<pre class="brush:js hidden">if ("Promise" in window) { let btn = document.getElementById("btn"); btn.addEventListener("click",testPromise); } else { |
