es6中的一个特性,他是一种异步编程的解决方案
new Promise((resolve,reject)=>{
setTimeout(()=>{
//成功时候调用resolve
resolve('hello World');
//失败时候调用reject
reject('error Message')
},1000)
}).then((data)=>{
console.log(data)
}).catch((err)=>{
console.log(err);
})promise方法有两个参数resolve,reject,这两个参数也是两个方法。成功时候调用resolve,失败时候调用reject 成功时把参数传给.then方法处理,失败时用catch方法获取失败信息
异步操作后会有三种动态:
pending:等待状态,如正在网络请求,或者定时器没到时间
fulfill:满足状态,当我们主动回调resolve时候,就是该状态,并回调.then()
reject:拒绝状态,并回调.catch()
链式调用:
<script>
new Promise((resolve,reject)=>{
setTimeout(()=>{
//成功时候调用resolve
resolve('hello World');
// //失败时候调用reject
reject('error Message')
},1000)
}).then((data)=>{
console.log(data);
return new Promise((resolve)=>{ //第一种链式写法
resolve(data+'111')
})
}).then((data)=>{
console.log(data);
return Promise.resolve(data+'aaa') //可以用第一种,这事第一种的简单写法
}).then((data)=>{
console.log(data);
return data+'bbb' //这是最简单的写法
}).then((data)=>{
console.log(data)
})
</script>reject参数的方法和这种差不多,当不用第一,第二种时,可以用throw直接抛出异常,再用catch接受
Promise.all([
new Promise(()=>{
}),
new Promise(()=>{
}),
]).then
当有两个异步请求要求同时满足时候,用all方法,all方法里面可以是数组形式,可以放多个promise.