一. 同步和异步的执行顺序
- 同步任务
(按照顺序一个一个执行)
示例:
console.log('任务1:同步')
console.log('任务2:同步')
console.log('任务3:同步')
============输出:
任务1:同步
任务2:同步
任务3:同步
- 异步任务
(按照顺序执行的过程中, 但遇到异步任务时,会继续执行下一个,等到异步任务完成时,异步才会再添加到主程序中执行. )
示例:
console.log('任务1:同步')
console.log('任务2:同步')
setTimeout(function (){
console.log('任务4:异步')
}) //不写定时器时间,默认为最小时间
console.log('任务3:同步')
============输出:
任务1:同步
任务2:同步
任务3:同步
任务4:异步
二. promise
多层异步函数循环调用的现象
setTimeout(function (){
console.log('任务4:异步')
console.log('任务3:同步')
setTimeout(function (){
console.log('任务5:异步')
console.log('任务6:异步')
})
})
作用
为了解决多层异步函数的嵌套问题, 需要用到 Promise使用
const p1 = new Promise((resolve, reject) => {
resolve(成功)
reject(失败)
})
p1.then(data => {
console.log(data) // ---->输出:成功后的数据
}).catch(err => {
console.log(err) // ---->输出:失败后的数据
})
方法 | 含义 |
---|---|
then | 成功后 只要是成功的状态(fulfilled)就自动调用 |
catch | 失败后 rejected 状态就自动调用 |
finally | 都会执行 无论失败与否,最后都会执行 |
- 解决嵌套
const p1 = new Promise((resolve, reject) => {
resolve("任务1成功后的数据")
// reject("任务1失败后的数据")
})
p1.then(data => {
console.log(data)
return new Promise(((resolve, reject) => {
resolve("任务2成功后的数据")
// reject("任务2失败后的数据")
}))
})
//这个.then就是处理上面then中return的Promise对象
.then(data1 => {
console.log(data1)
})
.catch(err => {
console.log(err)
})