有时候要写函数用到了异步,但是又想强行使他同步执行

这时候就可以用到 Promise

基础

首先,一个简单的 Promise 定义是这样的:

new Promise((resolve,reject)=>{ // 这里的 resolve 接收 成功 后返回的值, reject 接收 失败 后返回的值 
    // 注意: resolve 触发 then 方法 reject 触发 catch 方法
    if(...){
        resolve(funtion(){return 1});
    }else if(...){
        resolve(2);
  }else{
        reject(3);
    }
})

这里我喜欢把 resolve 写成 solve ,把 reject 写成 throwerr ,这是不要紧的

进阶

然后是进阶的用法: 搭配 asyncawait 实现同步操作

// 这里很简单在执行的 await 函数外套一个 async 就行了
async funtion(){
    await new Promise((solve,throwerr)=>{
        ...
    })
    //这样的话,就不用写 then 了
    ...
}

examples:

resolve + then

new Promise((solve,throwerr)=>{
    setTimeout(function(){
        solve(alert(1))
    },1500)
}).then(_=>{alert(2)})

reject + catch

new Promise((solve,throwerr)=>{
   	setTimeout(function(){
        throwerr("...")
    },1500)
}).catch(err=>{console.log("error: ",err)})

resolve + await

function sleep(time){
    return new Promise((solve,throwerr)=>{
        setTimeout(solve,time)
    })
}
(async _=>{
    await sleep(1500) // 原地等待 1500 ms
    console.log("sleep over") // 等待结束后执行
})()