异步回调与promise 基础

231 阅读2分钟

什么是异步什么是回调

同步和异步 如果可以直接拿到结果就是同步,不能直接拿到结果那就是异步。请着重体验过程的区别。 同步例子: 医院挂号,你拿到挂号单(等拿到号)你才能离开,必须要**拿到(结果)**才可以走。 排队等号 异步例子: 扫码排队等号吃饭, 拿到号 只要号叫到你了就可以吃饭,省去了(等)的过程 期间可以逛街什么的。 排队吃饭。

一定要会的promise 异步


    setTimeout(()=>{
        console.log('看看谁先运行了')
    })
    console.log(123123)

什么是回调 我自己的函数不调用,让别人调用我的函数 就是回调

  function my () {
       console.log('my')
   }
//    no exist my() in window environment 
   function him(fn) {
       fn()
//  把my函数 传给him函数 调用
   }
   him(my)

将上述代码简化,因为函数声明了一次仅仅调用了一次

//   let him=function him(){}
him(()=>{console.log('my')})

回调与同步与异步的关系 回调不一定非要在异步里,只是异步操作通常需要回调操作。 同步回调例子

array.forEach(n=>console.log(n))

区分同步还是异步 一般情况下的异步:

  1. ajax
  2. settimeout
  3. adeventlistener

什么时候使用promise 为什么使用promise

  1. 解决地狱回调的难题 可以使用链式调用.then()
  2. 可以进行捕获异常 .catch()
  3. 统一的规范处理
  4. 解决异步方法的统一方案 Promise mdn developer.mozilla.org/zh-CN/docs/…
return new Promise(reslove,reject)

为什么要返回一个promise 可以将你的回调函数绑定在该Promise上 在本轮 事件循环 运行完成之前,回调函数是不会被调用的。

Promise.all()  Promise.race()
// 实际应用场景

promise.all 应用场景

并发场景 多个请求结果合并在一起 一个渲染页面有多个请求。需求是多个请求都返回再一起再渲染。 不是并发请求,多个请求有多个loading all 只需设置一个。 具体表现再渲染页面的过程,提升用户体验。 juejin.cn/post/684490… promise.race

请求超时提示 坐电梯刷着刷着 显示网络不佳