Promise的三种状态:Pending(进行中),Fullfiled(完成)[resolve],Reject(失败),一旦状态改变就不会再变
先写一个简单的Promise
let a = new Promise(function(resolve,reject){
setTimeout(()=>{
doSomething()
if (/* 异步操作成功 */) {
resolve(value);
} else {
reject(error);
}
},3000)
}).then(function(value){ console.log(value)})
为什么要用Promise? 避免"回调地狱",易读易写
执行顺序
let promise = new Promise(function(resolve, reject){
console.log("1");
resolve()
});
promise.then(() => console.log("2"));
console.log("3")
// 1
// 3
// 2
和计时器混用的情况
let promise = new Promise(function(resolve, reject){
console.log("1");
resolve();
});
setTimeout(()=>console.log("2"), 0);
promise.then(() => console.log("3"));
console.log("4");
// 1
// 4
// 3
// 2
Promise优先级大于setTImeout
Promise属于JavaScript引擎内部任务,而setTimeout则是浏览器API,而引擎内部任务优先级高于浏览器API任务
.then如果是一个Promise,就立即执行这个Promise
Promise 类有 .then() .catch() 和 .finally() 三个方法
.then() 简单说就是之后Promise之后干嘛
.catch()设定 Promise 的异常处理序列
.finally()就是最后一定会干的事情
resolve()和then的return可以向下传值
async await
async必定返回promise函数,
await命令后面是一个 Promise 对象,返回该对象的结果。
如果不是 Promise 对象,就直接返回对应的值