vhxubo's blog
关于

promise

promise

使用方法

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不会 ~堵塞~

三种状态

  1. pending(进行中)
  2. fulfilled(已成功)
  3. 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))

参考链接