promise
promise
- 订阅模式
- callback
使用方法
const pro1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('pro1 done')
}, 1000)
})
pro1.then(value => console.log(value))
// result: pro1 done
function con (msg, time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(msg)
}, time)
})
}
con('hello', 1000).then(value => console.log(value))
解析
三种状态,两个内置函数;一旦承诺,无法从外部终止;多个promise不会 ~堵塞~
三种状态
- pending(进行中)
- fulfilled(已成功)
- rejected(已失败)
内置函数
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
resolve(value) — 如果任务成功完成并带有结果 value。 reject(error) — 如果出现了 error,error 即为 error 对象。
state — 最初是 "pending",然后在 resolve 被调用时变为 "fulfilled",或者在 reject 被调用时变为 "rejected"。 result — 最初是 undefined,然后在 resolve(value) 被调用时变为 value,或者在 reject(error) 被调用时变为 error。
Promise.all
Promise.all
会等待耗时最长的promise,如果遇到失败,则全部失败。成功返回value数组。
以下代码将在5000ms后直接报错。
const pro1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('pro1 done')
}, 1000)
})
const pro2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('pro2 done')
}, 2000)
})
const proerror = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('fuck'))
}, 5000)
})
Promise.all([pro1, pro2, proerror]).then(values => console.log(values))