Promise
基本用法
创建Promise
let done = true
const isItDoneYet = new Promise((resolve, reject) => {
if (done) {
const workDone = 'Here is the thing I built'
resolve(workDone)
} else {
const why = 'Still working on something else'
reject(why)
}
})
有两种状态对应的是resolve和reject,通过then来调用resolve,通过catch来捕捉reject(文档里貌似throw Error也会捕捉到)。一旦promise被调用,会进入等待状态(pending state),最终会以resolve或是reject状态结束。
个人的感觉就是将callback变成了resolve,通过then来触发回调函数。将之前的回调链拆分成了函数:(do => resolve)then(do => resolve)……
链式调用
const add3 = num => {
let s = num + 3;
return Promise.resolve(s);
}
const add6 = num => {
let s = num + 6;
return Promise.resolve(s);
}
add3(3)
.then(add6)
.then(data => {console.log(data);})
其他方法
Promise.all
如果需要同步promise的话,可以向Promise.all方法中传入promise列表,列表里的promise都执行完之后会继续往下执行。
Promise.race
只会将promise列表中最先运行出来的结果放入到回调函数中(剩下的Promise也会继续运行,但是不会再进入回调函数中)。示例如下:
const first = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'first')
})
const second = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'second')
})
Promise.race([first, second]).then(result => {
console.log(result) // second
})
async/await
在Promise的基础上简化成了async/await
官方教程中的例子
const getFirstUserData = async () => {
const response = await fetch('/users.json') // get users list
const users = await response.json() // parse JSON
const user = users[0] // pick first user
const userResponse = await fetch(`/users/${user.name}`) // get user data
const userData = await userResponse.json() // parse JSON
return userData
}
getFirstUserData()
有待补充……
参考链接: