promise跟setTimeout在uniapp中存在的异步问题

217 阅读1分钟

uniapp中封装了promise,但实质上是由setTimeout模拟Polyfill

promise优先级高于setTimeout两者皆为异步\color{DarkTurquoise}{promise优先级高于setTimeout 两者皆为异步}

var arr =[ ]
setTimeout(()=>arr.push(6),0)  //js是从上往下走,发现setTimeout则开始异步
arr.push(1)
const p = new Promise(resolve=>{ //Promise本质上是一个构造函数,可在内部进行异步操作,
//在uniapp中本质是setTimeout,就不存在then的调用
            arr.push(2) 
            resolve() 
})
arr.push(3)
p.then(()=>arr.push(5))  //then方法是Promise原型上存在的方法。then去调用const p里面的resolve()
//也就是说Promise new出来的对象都存在then和catch方法
arr.push(4)
setTImeout(()=>arr.push(7),0)  //异步
setTimeout(()=>{ //异步
            console.log(arr)
},1000)

实际应该输出[1,2,3,4,5,6,7]

ios输出[1,2,3,4,6,5,7]