语法高亮,滚动条美化,设置页面调整

This commit is contained in:
fofolee
2019-04-19 02:41:09 +08:00
parent 1e8f76c000
commit 359d29ee0b
1590 changed files with 12328 additions and 11441 deletions

View File

@@ -10,7 +10,7 @@
<div><iframe class="interactive interactive-js" frameborder="0" height="250" src="https://interactive-examples.mdn.mozilla.net/pages/js/promise-constructor.html" width="100%"></iframe></div>
<p class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a class="external" href="https://github.com/mdn/interactive-examples" rel="noopener">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
<h2 id="语法">语法</h2>
<pre class="brush: js">new Promise( function(resolve, reject) {...} /* executor */ );</pre>
<pre><code class="language-javascript">new Promise( function(resolve, reject) {...} /* executor */ );</code></pre>
<h3 id="参数">参数</h3>
<dl>
<dt>executor</dt>
@@ -72,15 +72,15 @@
</dl><p></p>
<h2 id="创建Promise">创建Promise</h2>
<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">const myFirstPromise = new Promise((resolve, reject) =&gt; {
<pre><code class="language-javascript">const myFirstPromise = new Promise((resolve, reject) =&gt; {
// ?做一些异步操作,最终会调用下面两者之一:
//
// resolve(someValue); // fulfilled
// ?或
// reject("failure reason"); // rejected
});</pre>
});</code></pre>
<p>想要某个函数?拥有promise功能只需让其返回一个promise即可。</p>
<pre class="brush: js">function myAsyncFunction(url) {
<pre><code class="language-javascript">function myAsyncFunction(url) {
return new Promise((resolve, reject) =&gt; {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
@@ -88,10 +88,10 @@
xhr.onerror = () =&gt; reject(xhr.statusText);
xhr.send();
});
};</pre>
};</code></pre>
<h2 id="示例">示例</h2>
<h3 id="非常简单的例子">非常简单的例子</h3>
<pre class="brush: js">let myFirstPromise = new Promise(function(resolve, reject){
<pre><code class="language-javascript">let myFirstPromise = new Promise(function(resolve, reject){
  //当异步代码执行成功时我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
  //在本例中我们使用setTimeout(...)来模拟异步代码实际编码时可能是XHR请求或是HTML5的一些API方法.
setTimeout(function(){
@@ -104,14 +104,14 @@ myFirstPromise.then(function(successMessage){
  //successMessage参数不一定非要是字符串类型这里只是举个例子
  console.log("Yay! " + successMessage);
});
</pre>
</code></pre>
<h3 id="高级一点的例子">高级一点的例子</h3>
<pre class="brush: html hidden">&lt;button id="btn"&gt;Make a promise!&lt;/button&gt;
<pre><code class="language-html hidden">&lt;button id="btn"&gt;Make a promise!&lt;/button&gt;
&lt;div id="log"&gt;&lt;/div&gt;
</pre>
</code></pre>
<p>本例展示了 <code>Promise</code> 的一些机制。 <code>testPromise()</code> 方法在每次点击 <a href="/zh-CN/docs/Web/HTML/Element/button" title="HTML &lt;button&gt; 元素表示一个可点击的按钮,可以用在表单或文档其它需要使用简单标准按钮的地方。"><code>&lt;button&gt;</code></a> 按钮时被调用该方法会创建一个promise 对象,使用 <a href="/zh-CN/docs/Web/API/Window/setTimeout" title="WindowOrWorkerGlobalScope 混合的 setTimeout()方法设置一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码。"><code>window.setTimeout()</code></a> 让Promise等待 1-3 秒不等的时间来填充数据通过Math.random()方法)。</p>
<p>Promise 的值的填充过程都被日志记录logged下来这些日志信息展示了方法中的同步代码和异步代码是如何通过Promise完成解耦的。</p>
<pre class="brush: js">'use strict';
<pre><code class="language-javascript">'use strict';
var promiseCount = 0;
function testPromise() {
@@ -152,15 +152,15 @@ function testPromise() {
log.insertAdjacentHTML('beforeend', thisPromiseCount +
') Promise made (&lt;small&gt;同步代码结束&lt;/small&gt;)&lt;br/&gt;');
}</pre>
<pre class="brush:js hidden">if ("Promise" in window) {
}</code></pre>
<pre><code class="language-js hidden">if ("Promise" in window) {
let btn = document.getElementById("btn");
btn.addEventListener("click",testPromise);
} else {
log = document.getElementById('log');
log.innerHTML = "Live example not available as your browser doesn't support the &lt;code&gt;Promise&lt;code&gt; interface.";
}
</pre>
</code></pre>
<p>点击下面的按钮可以看到示例代码运行的效果,前提是你的浏览器支持 <code>Promise</code>。快速点击按钮多次你会观察到Promises填充值的过程。</p>
<p><iframe class="live-sample-frame sample-code-frame" frameborder="0" height="200" id="frame_高级一点的例子" src="https://mdn.mozillademos.orgReference/Global_Objects/Promise$samples/%E9%AB%98%E7%BA%A7%E4%B8%80%E7%82%B9%E7%9A%84%E4%BE%8B%E5%AD%90?revision=1535408" width="500"></iframe></p>
<h2 id="使用_XHR_加载图像">使用 XHR 加载图像</h2>