mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2026-02-28 01:58:28 +08:00
语法高亮,滚动条美化,设置页面调整
This commit is contained in:
@@ -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) => {
|
||||
<pre><code class="language-javascript">const myFirstPromise = new Promise((resolve, reject) => {
|
||||
// ?做一些异步操作,最终会调用下面两者之一:
|
||||
//
|
||||
// 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) => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", url);
|
||||
@@ -88,10 +88,10 @@
|
||||
xhr.onerror = () => 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"><button id="btn">Make a promise!</button>
|
||||
<pre><code class="language-html hidden"><button id="btn">Make a promise!</button>
|
||||
<div id="log"></div>
|
||||
</pre>
|
||||
</code></pre>
|
||||
<p>本例展示了 <code>Promise</code> 的一些机制。 <code>testPromise()</code> 方法在每次点击 <a href="/zh-CN/docs/Web/HTML/Element/button" title="HTML <button> 元素表示一个可点击的按钮,可以用在表单或文档其它需要使用简单标准按钮的地方。"><code><button></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 (<small>同步代码结束</small>)<br/>');
|
||||
}</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 <code>Promise<code> 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>
|
||||
|
||||
Reference in New Issue
Block a user