promise俗稱鏈?zhǔn)秸{(diào)用,它是es6中最重要的特性之一。
簡(jiǎn)單的說可以不停的then調(diào)用嵌套在調(diào)用(異步之后,鏈?zhǔn)秸{(diào)用方式執(zhí)行回調(diào)),這種操作方式稱為promise。
promise鏈用來解決異步太好用了。
1. Promise
包含兩個(gè)參數(shù):resolve ,reject 。
resolve:將promise的狀態(tài)設(shè)置為完成狀態(tài)(resolved),此時(shí)then方法捕捉變化,執(zhí)行成功的回調(diào)。
reject:將promise狀態(tài)設(shè)置為無效(rejected),此時(shí)then方法執(zhí)行失敗回調(diào)
(1)將promise的狀態(tài)都設(shè)置成(resolve)
1、初始化:比如說以省、市、區(qū)(province、city、area)三個(gè)方法來演示下鏈?zhǔn)秸{(diào)用的關(guān)系
(采用setTimeout模擬異步操作)
function province() {
console.log('陜西省')
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('陜西 省份')
resolve('陜西')
}, 2000);
})
}
function city(data) {
console.log('省份' + data)
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('西安 市級(jí)')
resolve('西安市')
}, 3000);
})
}
function area(data) {
console.log('市級(jí)' + data)
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('雁塔 區(qū)縣')
resolve('雁塔區(qū)')
}, 1000);
})
}
2、 函數(shù)寫完之后,就開始結(jié)合then來鏈?zhǔn)秸{(diào)用了
province()
.then((data)=>{
return city(data)
})
.then((data)=>{
return area(data)
})
.then((data)=>{
console.log(data)
})
簡(jiǎn)化寫法:
province().then(city).then(area).then((data)=>{
console.log(data)
})
3、 查看控制臺(tái)輸出:

hello.png
2. rejected(部分置為無效狀態(tài))
1、初始化:同樣的以上述的函數(shù)為例
function province() {
console.log('陜西省')
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('陜西 省份')
reject('陜西')
}, 2000);
})
}
function city(data) {
console.log('省份' + data)
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('西安 市級(jí)')
resolve('西安市')
}, 3000);
})
}
2、 函數(shù)寫完之后,就開始結(jié)合then來鏈?zhǔn)秸{(diào)用了
province()
.then(city,(data)=>{
console.log(data)
})
查看控制臺(tái)輸出:

reject.png
等同于(null不執(zhí)行)
province()
.then(null, (data) => {
console.log(data)
})
查看控制臺(tái)輸出:

reject.png
等同于(直接執(zhí)行catch回調(diào),拋出異常,頁面也不會(huì)卡死,直接走catch)
province()
.then(city).catch((data)=>{
console.log(data)
})
查看控制臺(tái)輸出:

reject.png
(備注:為reject的時(shí)候,執(zhí)行then的第二個(gè)參數(shù)回調(diào),不會(huì)執(zhí)行city)
3、 Promise之All,等執(zhí)行所有異步,完事之后執(zhí)行then回調(diào)返回出數(shù)組數(shù)據(jù)類型
1、初始化兩個(gè)同級(jí)函數(shù)
function province1() {
console.log('陜西省1')
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('陜西 省份1')
resolve('陜西1')
}, 2000);
})
}
function province2() {
console.log('陜西省2')
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('陜西 省份2')
resolve('陜西2')
}, 3000);
})
}
2、函數(shù)寫完之后,調(diào)用了
Promise.all([province1(), province2()]).then((data)=>{
console.log(data)
})
3、 查看控制臺(tái)輸出:

PromiseAll.png