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 -> fulfilled
- pending -> 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)//->成功
},function(error){
//failure
console.log(error)//->失败
})</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) => {
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>