Promise是一个构造函数,它有三种状态,peading,fulfilled,resolved分别对应 等待,成功,失败这三种状态。
let a = new Promise((resolve, reject) => {});
console.log(a);
什么都不干是peading状态.
let a = new Promise((resolve, reject) => {
resolve(2)
});
console.log(a);
let a = new Promise((resolve, reject) => {
resolve(2);
}).then((res) => {
console.log(res, "成功的值");
});
(3)图示
let a = new Promise((resolve, reject) => {
reject(3);
})
.then((res) => {
console.log(res, "成功的值");
})
.catch((reject) => {
console.log(reject, "失败的值");
});
通过.catch能够获取失败的值
备注:无论成功和失败都会经过
let a = new Promise((resolve, reject) => {
reject(3);
})
.then((res) => {
console.log(res, "成功的值");
})
.catch((reject) => {
console.log(reject, "失败的值");
})
.finally(() => {
console.log("11");
});
setTimeout(() => {
console.log("吃饭");
setTimeout(() => {
console.log("睡觉");
setTimeout(() => {
console.log("打豆豆");
}, 3000);
}, 4000);
}, 5000);
获取第一个接口的参数之后,立马将获取的参数,传入第二个接口,可以看出代码非常乱的。
可以看出已经获取到了数据。
这是Es7推出的新语法,这样看起来是不是又更加的简洁明了。
代码:
async function fn(){
return 2
}
console.log(fn());
返回的结果:
用同步写代码的方式获取异步的结果,所谓的阻塞只不过是表现的形式不同。
async function m() {
console.log(0);
const n = await 1;
// Promise.resolve(1)
console.log(n); //
}
m();
console.log(2);
// async function m() {
// return Promise.resolve(1).then((n) => {
// console.log(n);
// });
// }
// 给n复制和打印n是在异步队列,打印玩0任务直接结束
思路:首先打印0 然后 等待n和打印n的代码加入为任务队列中,转换之后的代码:
return Promise.resolve(1).then((n) => {
// console.log(n);
// });
此时这个函数已经结束。.
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(function () {
console.log("setTimeout");
}, 0);
async1();
new Promise(function (resolve) {
console.log("promise1");
resolve();
}).then(function () {
console.log("promise2");
});
console.log("script end");
分析思路:
1.同步执行 console.log("script start");
2.执行 async1(); console.log("async1 start"); 等待async2()函数返回Promise的状态,并将后面的代码加入微任务的队列 微1: console.log("async1 end"); 执行async2(), console.log("async2"); 如果什么都没返回默认返回 // return Promise.resolve(undefined),将定时器的代码加入宏任务队列, console.log("setTimeout");在执行 console.log("promise1"); 后面的代码加入微任务队列2 console.log("promise2");然后在执行 同步 console.log("script end"); 执行微1,微2,宏任务即可。