浅谈promise、async和await
1、理解promise
promise是ES6新增加的对象,它的产生就是为了解决异步回调地狱问题利用那个then函数的链式调用解决了异步回调地狱的问题
在这里要注意一点:有人认为只要是回调函数就都是异步的,其实不然
function foo(cb) {
console.log(1);
cb();// 推翻:所有的回调函数都是异步。
console.log(3);
}
foo(() => {
// 回调函数:当一个定义的函数,作为另一个函数的实参时。
console.log(2);
})
console.log(4);
证明:在promise之前,所有的异步都是回调函数
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
console.log(3);
// 区分:哪个是同步的哪个是异步?
// 1、setTimeout() 是同步执行的
// 2、回调函数是异步执行的
// 一点要区分清除,setTimeout是同步执行的,只是延迟执行了,延迟并非异步,异步执行的是回调函数
promise函数的执行特点
-
promise对象,指的是Promise构造函数创建的实例对象
console.log(1); let p = new Promise((resolve, reject) => { // 1:该函数是不是回调函数? 是 // 2:该函数是同步执行还是异步执行? 同步执行 // 3:话说promise实例对象是为了解决异步回调地狱问题?究竟哪里的程序是异步程序呢?then 的回调函数异步执行 console.log(2); // 1 resolve 是触发 then实参一函数的条件之一 // 2 resolve 同步触发函数,但是 then的回调函数是异步触发的 // 因为then的回调函数,在Promise内部有多个执行条件,resolve执行只是条件之一 // bug: resolve赋值不是then的实参一,是Promise内部定义的函数 resolve() // reject 是触发then 实参二函数的条件之一,也是触发c