Promise - 承诺
+ 一个承诺多少个状态
=> 持续 pending
=> 成功 resolved
=> 失败 rejected
+ ES6 的语法
=> 专门用来解决回调地狱问题
Promise的语法
+ Promise 是 ES6 内置的构造函数
+ 语法: new Promise(function(){ 你要执行的异步的事情 })
=> 实例化的时候,这个函数接收两个参数
=> resolve,reject
+ 语法:
=> 实例化对象身上有两个方法
1.then( )
-> promise对象.then( function( ){ } )
2.catch( )
-> promise对象.catch( function( ){ } )
=> then方法的函数传递给了 实例化的 resolve
=> catch方法的函数传递给了实例化的 reject
// 1.基础语法
var num = 1
var p = new Promise(function(resolve,reject){
// resolve 是成功的回调
// 当你书写resolve()的时候,实际上是在调用 then 里面的函数
// reject 是失败的回调
// 当你书写reject()的时候,实际上是在调用 catch 里面的函数
// 异步事情
setTimeout(()=>{
if(num){
resolve('这是一个成功的回调')
}else{
reject('这是一个失败的回调')
}
},3000)
})
p.then(function(res){
console.log(res)
})
p.catch(function(err){
console.log(err)
})
Promise进阶语法
+ 当你在一个 promise 对象的 this 里面返回一个新的 promise 对象
+ 你可以在这个then的后面继续来一个then接收第一个then里面 promise 对象的结果
// 2.进阶语法
var num = 1
var str = '成功'
var p1 = new Promise(function(resolve,reject){
setTimeout(() => {
resolve('我是第一个Promise成功的回调')
}, 3000);
})
var p2 = p.then(function(res){
console.log(res)
// 向外暴露一个新的 Promise
return new Promise(function(resolve,reject){
setTimeout(() => {
if(str == '成功'){
resolve('我是第二个Promise成功的回调')
}else{
reject('我是第二个Promise失败的回调')
}
}, 5000);
})
})
p2.then(function(res){
console.log(res)
})
p2.catch(function(err){
console.log(err)
})