Promise
对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。
如下:
new Promise(function(resolve,reject){
//内容
})
先用简单的例子来了解一下promise的语法应用:
let x=6;
let promise=new Promise(function(resolve,reject){
if(x==1){
resolve("success")
}else{
reject("error")
}
})
此时,则需要使用promise的 then 方法。
promise.then(res=>{
console.log(res)
//结果为 Uncaught (in promise) error
//这里的 error 是打印出来的结果
},err=>{
console.log(err)
//结果为error
})
promise.then 有两个参数:成功和失败
promise.then(success,error)
//所以第一次打印的结果会有 Uncaught (in promise)
//err=>{}作用就是捕获错误信息
promise有专门捕获错误的方法 catch
promise.catch(err=>{})
上述两种可直接写成:
promise.then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
针对Promise 本身还有几个内容:
Promise.resolve()
//它是指 将resolve里的内容转成一个Promise对象,且为成功状态
用一个例子具体了解一下:
let p=Promise.resolve("javascript");
p.then(res=>{
console.log(res)
})
//这里:let p=Promise.resolve("javascript") 等于:
new Promise(resolve=>{
resolve("javascript")
})
Promise.reject()
//它是指 将reject里的内容转成一个Promise对象,且为失败状态
同理:
let p=Promise.reject("javascript2");
p.then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
//这里:let p=Promise.reject("javascript2") 等于:
new Promise(reject=>{
reject("javascript2")
})
Promise 的批量操作: Promise.all([p1,p2,p3,p4…]),通俗来讲就是将很多Promise对象放在一个数组里面,进行打包,但是它仍然是一个Promise对象。
举例说明一下:
let p1=Promise.resolve("a");
let p2=Promise.resolve("b");
let p3=Promise.resolve("c");
//仍然可以用then和catch:
Promise.all([p1,p2,p3]).then(res=>{
console.log(res)
})
此方法可用于数据请求,若p1,p2,p3是三种不同的信息,将其解构,然后直接获取数据。例:
Promise.all([p1,p2,p3]).then(res=>{
let [res1,res2,res3]=res;//解构
console.log(res1,res2,res3)
})
但是,all里面的Promise对象都是resolve状态。
Promise.race()与Promise.all()作用类似,不同的是,只要定义的Promise对象有一个resolve状态,就返回值。