js的单线程、同步和异步以及异步编程

异步编程

一、js是单线程

所谓单线程是指一次只能完成一个任务。如果有多个任务,就必须排队等候,只有等前面得一个任务完成,才能继续后面得一个任务。单线程只要期中有一个任务耗时长,后面得任务都必须排队等着。为了解决这个问题,js将任务得执行模式分为两种分别是 同步和异步

二、同步和异步

先弄清楚一件事情:编程中得同步异步和现实中得同步异步正好相反。

  • 同步:连续不间断地执行多个任务,会阻塞主线程。比如console.log()、alert()

  • 异步:不连续地执行多个任务,不会阻塞主线程比如:setTimeout()、网络请求、读取本地文件等

    console.log(1)
    setTimeout(()=>{
               console.log(2)
               },1000)
    console.log(3)
    ///1 3 2
    

    三、异步编程解决方案

    1、回调函数

    1、什么是回调函数?

    回调函数就是一个被作为参数传递地函数。通俗地说,回调函数就是一个函数,并且是作为参数传递给另一个函数的函数。

    2、回调函数的基本用法

    案例一:先输出1,然后再打印2.

    案例二:简单加法运算,但是有一个条件,传入参数和返回计算结果是异步的。

    3、回调函数有什么用?

    回调函数是异步编程最基本的方法

    ajax(url,res=>{
        ///处理逻辑
    })
    

    优点:简单、容易理解和实现。

    缺点:不利于代码的阅读和维护、尤其是多个回调函数嵌套的情况,如果超过3层嵌套,就容易写出回调地狱代码。此外、它不能使用try catch 捕获异常,也不能直接return。

    ajax(url1,res=>{
        ///处理逻辑
        ajax(url2,res=>{
            //处理逻辑
            ajax(url3,=>{
                ///处理逻辑
                ……
            })
        })
    })
    

    2、promise

    promise本意是承诺、许诺。在程序中的意思是承诺过一段时间后给一个结果,

    1、promise的3中状态

    • pending:等待状态(又叫进行中)
    • fulfilled/resolved:成功状态
    • rejected:失败状态

    2、promise的基本用法

    promise对象是全局对象,可以理解胃一个类,参数是一个回调函数,他有俩个参数方法,分别是resolve和rejecte

    • resolve的作用:将promise对象的状态从等待中(pending)变成成功状态(fulfilled)。在异步操作成功的时候调用,并且异步操作结果作为参数传递出去
    • reject的作用:将promise对象的状态从等待中(pending)变成失败状态(rejected)在异步操作失败时调用,并将异步报出的错误作为参数传递出去。

    3、promise的实例方法

    • promise 对象有三种状态:pending(等待状态)、resolved/fulfilled(成功状态)、rejected(失败状态)。只有异步操作的结果(要么成功,调用resolve;要么失败调用reject)可以决定当前是哪一个状态,任何其他操作都无法改变这个状态。

    • promise对象的状态改变,只有两种可能:要么从pending->fulfilled;要么pending->rejected。只有这两种情况发生,状态就不会再变了,会一直保持这个结果。

      let p =new promise((resolve,reject)=>{
          reject('失败')//pending->rejected
          resolve('成功')//不会执行,因为pending对象一旦改变状态就不会再次改变
      });
      p.then(res=>{
          console.log(res)
          
      }).catch(err=>{
          console.log(err)
      })
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值