回调与Promise

一.回调是什么

回调可以简单的理解为 你去商店买某个东西,店家告诉你卖完了,你留下电话让店家有货的时候通知你来买。回调就是这个原理

同步回调

立即执行,全部执行完了才算结束,比如数组遍历

const arr=[1,2,3]
arr.forEach(item=>{
console.log(item)
})
//foreach全部都执行完了才能执行下面的
console.log("forEach之后")

异步回调

异步回调函数,会放入队列中将来执行

setTimeout(()=>{
	console.log("timeOut callback")
},0)
//先执行下面的代码 后执行setTimeout中的代码,即使时间是0
console.log("setTimeout()之后")

不会立即执行,放入回调队列中执行,比如定时器

二.回调地狱

回调地狱指的是多层回调嵌套下的代码,难以阅读,难以维护,比如下面这段代码:

setTimeout(()=>{
      setTimeout(()=>{
        setTimeout(()=>{
          console.log("这是第三层")
        },1000)
        console.log("这是第二层")
      },2000)
      console.log("这是第一层")
    },3000)

当这段代码嵌套到3层以上的时候,就很难阅读了

所以为了解决回调地狱这个问题,Promise出现了

三.Promise

Promise这个东西其实挺好理解,就像它的名字一样,承诺。它要得到一个结果,才会继续执行下边的操作,

从语法上来说:Promise是一个构造函数

从功能上来说,Promise对象是用来封装一个一步操作并可以获取其结果

一个promise对象的状态只能改变一次无论成功还是失败,都会有一个结果,成功就执行resolve()方法,失败就执行reject()方法

let promise = new Promise((resolve, reject) =>{//执行器函数
    console.log("执行器函数是同步回调")
    //执行异步任务
    setTimeout(()=>{
        const time=Data.now()
         //如果成功
        if(time%2==0){
            resolve("成功了")
        }else{
	    //如果失败
            reject("失败了")
        }
    },1000)   
});
promise.then(
value=>{
    //onResolved()
    console.log(value)
},
reason=>{
    //onRejected()
    console.log(reason)
}
)

Promise可以解决回调地狱,但因为它是链式调用,所以并不是最好的解决方法

doSomething().then(res=>{
return doSomethingElse(res)
}).then(res=>{
return doAnotherThing(res)
}).then(res=>{
console.log(res)
}).catch(err)

所以在promise的基础上,出现了async和await

async用于声明function是异步的,它返回的是一个Promise对象,而await是强制把异步变成了同步,这一句执行完毕才能执行下一句,而且只能用于async声明的方法内

async function request(){
	try{
	const res=await doSomething()
	cosnt res2=await doSomethingElse()
	const res3=await doAnotherThing()
	}catch(err){
	console.log(err)
	}
}
reuqest().then(res=>{
    console.log(res)
})

更多相关知识:https://segmentfault.com/a/1190000016788484

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值