定义
大家应该都知道promise是js中执行异步操作的一种方式,英文叫做承诺,那么为什么叫做承诺呢,因为每个promise都承诺会有一个then去处理状态改变后的操作,即一个 promise 必须有一个 then 方法用于处理状态改变
状态说明
Promise包含pending、fulfilled、rejected三种状态:
- pending:初始等待状态,即新建完promise之后的状态
- resolve:指已经解决,将 promise 状态设置为fulfilled
- rejected:指拒绝处理该请求,将promise状态设置为rejected
- 状态一旦改变将不可更改
promise 没有使用 resolve 或 reject 更改状态时,状态为 pending
console.log(
new Promise((resolve,reject) => {})
)//Promise {<pending>}
当状态改变后:
console.log(
new Promise((resolve,reject) => {
resolve("fulfilled");
})
) //Promise {<resolved>: "fulfilled"}
console.log(
new Promise((resolve,reject) => {
reject("reject");
})
) //promise{<rejected>: "rejected"}
promise执行
promise 创建时即立即执行即同步任务,then 会放在异步微任务中执行,需要等同步任务执行后才执行。
(js执行顺序:先执行主线程上的同步任务,再执行任务队列中的微任务,最后再去执行宏任务)
let promise = new Promise((resolve,reject) => {
resolve("fullfilled")
console.log("同步任务1")
});
promise.then( msg => {
console.log(msg);
})
console.log("同步任务2")//同步任务1,同步任务2,fullfilled
-
promise 的 then、catch、finally的方法都是异步任务
-
程序需要将主任务执行完成才会执行异步队列任务
const promise = new Promise(resolve => resolve("success"));
promise.then(alert);
alert("同步任务")
promise.then( () => {
alert("leojiang")
})//同步任务,success,leojiang
这里先加载alert中的同步任务,(这是主线程的主任务),然后再按顺序去执行两个then的微任务