Skip to content

Promise基本使用

ES6新增了正式的Promise引用类型,支持优雅地定义和组织异步逻辑。
ES8新增了异步函数, “async/await”后面会讲到。

  • 异步的存在的意义
    • JavaScript是单线程的语言,而且基于事件循环模型。
    • 在同步行为中,执行代码的时候遇到耗时任务就会阻塞下面代码的执行。为了解决这种问题,就有了异步机制

以往的异步编程方式

js
//定时器方式
function double(value, sucess, failure){
    setTimeOut(()=>{
   	try{
        sucess(value*2)
    }catch(err){
        failure()
    }
}, 1000)
}

//事件监听
addEventListener("click",()=>{
    //操作
})

//发布订阅

class Emit{
    constructor(){
        this.listeners = []
        this.size = 0
    }
    on(key,fn){
        fn.id = ++this.size
        if(this.listeners[key]){
            this.listeners[key].push(fn);
        }else{
            this.listeners[key] = []
            this.listeners[key].push(fn)
        }

    }
    off(fn){
        this.listeners.forEach((item, index)=>{
            if(fn.id === item.id){
                this.listeners.splice(index,1)
                this.size--
            }
        })

    }
    tigger(fn,...rest){
        this.listeners.forEach((item, index)=>{
            
            if(fn===item){
                item(...rest)
            }
            if(fn===item&&fn.once){
                this.listeners.splice(index,1)
                this.size--
            }
        })
    }
    once(fn){
        fn.id = ++this.size
        fn.once = true
        this.listeners.push(fn);
    }
}
let emit = new Emit()
let fn = function(){
    console.log("fn");
}
let fn1 = function(){
    console.log("fn1");
}

Promise基础

  • 通过new 操作符进行实例化,创建时需要传入executor函数作为参数。
  • promise的状态机,promise有三种状态:
    • pedding(待定)
    • fulfilled (兑现 或者称为成功,resolved)
    • rejected (拒绝, 或称为失败)
    • 状态只能从pedding变为fulfilled 或 rejected ,改变后不再改变

Promise使用

js

let ret = new Promise((resolve, reject)=>{
    Math.random()>0.5?resolve("success"):reject("error")
})
最近更新