文章博客

技术团队文档示例


ES6-3Promise对象

<h2>1. Promise的含义</h2> <blockquote> <p>1.对象的状态不受外界影响</p> </blockquote> <pre><code>- 三种状态: - pending (进行中) - fulfilled (已成功) -rejected (已失败)</code></pre> <blockquote> <p>2.一旦状态改变,就不会在变,任何时候都可以得到这个结果。</p> </blockquote> <pre><code>- 两种可能 - pending -&gt; fulfilled - pending -&gt; rejected 只要两种情况发生,状态就凝固了,不会再变了会一直报纸这种结果!</code></pre> <h2>2. 基本用法</h2> <blockquote> <p>ES6规定,Promise是一个构造函数,用来生成Promise实例。</p> </blockquote> <pre><code class="language-javascript">const promise = new Promiase(function(resolve,reject){ //...somecode var a = 10; if(a){ resolve('成功') }else{ reject('失败') } })</code></pre> <blockquote> <p>上面实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数</p> </blockquote> <pre><code class="language-javascipt">promise.then(function(value){ //success console.log(value)//-&gt;成功 },function(error){ //failure console.log(error)//-&gt;失败 })</code></pre> <p>上面代码中,then方法:</p> <ul> <li>promise.then(函数1,函数2/可选)</li> <li>函数1:function(resolve){};成功的值resolve -函数2:function(error){};失败的值 error 也可以: Promise.then(function(vlaue){}).catsh(function(error){//捕捉错误}) 一般来说,调用resolve或reject以后,Promise 的使命就完成了,后继操作应该放到then方法里面,而不应该直接写在resolve或reject的后面。所以,最好在它们前面加上return语句,这样就不会有意外。</li> <li> <p>new Promise((resolve, reject) =&gt; { return resolve(1); // 后面的语句不会执行 console.log(2); })</p> <p>let state = 1; function step1(resolve,reject){ console.log('开始1') if(state == 1){ resolve('开始1完成') }else{ reject('开始1失败') } }</p> <p>function step2(resolve,reject){ console.log('开始2') if(state == 1){ resolve('开始2成功') }else{ reject('开始2失败') } }</p> <pre><code>function step3(resolve,reject){ console.log('开始3') if(state == 1){ resolve('开始3成功') }else{ reject('开始3失败') }</code></pre> <p>}</p> <p>调用Promise new promise(step1).then(function(val){ console.log(val); return new Promise(stem2); }) .then(function(val){ console.log(val) return new Promise(stem3) }) .then(function(val){ console.log(val); return val; }) .catch(function(error){ console.log(error); })</p> </li> </ul> <h2>3.async + await</h2> <pre><code>async function ajaxRequest() { let a1 = await new Promise(step1); let b1 = await new Promise(step2); let data = await new Promise(step3,{ a1, b1 }) return data; } ajaxRequest().then(function(data){ console.log(data) }).catch(function(err){ console.log(err) })</code></pre>

页面列表

ITEM_HTML