js任务队列链接
js是一直在轮训一个主任务队列其他任务做完之后js再去任务队列里面轮训,有的话就执行
Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
promise个状态方法里面的任务是微任务 主线程里面的动作是宏任务,只有等宏任务里面的代码都执行完了,轮训的时候才能拿到微任务,
所以这段代码的输出才是先输出123 再输出成功处理的业务.
同理,虽然console.log(“234”)在微任务之后,但是他在里面也相当于是宏任务,也会比resolve要先执行 这个执行的顺序得搞清楚
promise的状态是单向的不可逆的
这个地方调了成功和失败两个,但是在规则上他只能是调取一个,状态的设置是不可逆的,所以只能够调用前面的那个
用promise封住定时器
function timeout(delay = 1000) {
return new Promise(resolve => { setTimeout(resolve, delay) })
}
timeout(2000).then(() => {
console.log("123")
})
使用Map实现promise队列
function queue(num) {
let promise = Promise.resolve();
num.map(v => {
promise = promise.then(_ => {
return new Promise(resolve => {
setTimeout(() => {
console.log(v)
resolve()
}, 1000);
});
})
})
}
async就相当于promise 而await就相当于 then
整个的内部是一样的只是表现的形式不一样了而已
需要注意的是async指定了函数 才能在那个函数里面写await