对promise的理解,及面试题

常见的异步操作

为什么要执行异步操作?
因为JS是单线程的操作,但是有时候例如ajax请求,
需要请求数据,这个请求需要耗费很多时间,
这个时候我们就需要异步操作,如果不使用异步操作,
等待请求会造成线程阻塞。

1.回调函数(callback)
回调是一个B函数被作为一个参数传递到A函数里,在B函数执行完毕后执行A函数
例子:

function A(callback){
var m = 1;
var n = 2;
alert(callback(m,n));
}
function B(m,n){
return m+n;
}
A(B);  //会输出3
注意回调函数也是分同步和异步的
//同步操作
function A(callback){
    console.log("I am A");
    callback();  //调用该函数
}
function B(){
   console.log("I am B");
}

A(B); //先输出I am A然后输出I am B
这里的同步操作中的两个函数是没有关系的,仅仅是一个调用

2.事件监听

事件监听中的异步操作不取决于代码的书写顺序,而是取决某一事件是否发生了。
时间监听的函数有:on,bind,listen,addEventListener
f1.on('done',f2); //为f1绑定一个事件
function f1(){
  settimeout(function(){
    f1.trigger('done') 
    //这里的意思是执行完成后会立即出发done事件,然后再去执行f2函数
  },100);
}
优点:好理解,每个事件都可以绑定多个回调函数
缺点:程序都变成事件驱动型,程序运行会变得不清晰

3.发布订阅者模式,老师封装的observe函数
如果要说这个,一定要把老师封装的发布订阅者模式流程熟练描述出来,最好能写出来
4.promise

这里要先明白宏任务和微任务?
首先了解微任务执行顺序在宏任务之前
微任务:Promise
宏任务:setTimeout,setInterVal
注意:setTimeout({},time) //这里的time不管是延迟了多长时间,微任务都是在他之前执行,执行顺序和这个time无关。

首先明白promise有两种状态,在数据请求的时候,会有等待(pending)和完成(settled)两种状态
当数据请求有了结果(返回或者超时)状态变成,成功(resolved)和错误(rejected)这两种状态

new Promise(
  function (resolve, reject) {
    resolve('成功') // 数据处理完成
    reject('失败') // 数据处理出错
  }
).then(
  (res) => {console.log(res)},  // 成功
  (err) => {console.log(err)} // 失败
)

先执行Promise里面的函数,然后执行then函数,then中会接收上面promise中函数返回的两个函数作为参数,
成功或失败然后做相应操作,且可以无限调用来解决回调地狱。

5.async/await

async function(){
    let data=await a(); //这里的a函数是一个异步操作
    let data1=await b(); //这里的b函数是一个异步操作
}

简单来说就是async等一等await的操作,等await操作完了再去执行下面的操作;

这里的a如果是一个http请求
http请求刚发出去的时候其实系统就认为a已经执行完了,就去执行b(就是说其实没有请求完,只运行完那句话,系统就默认执行完)
所以需要将把a里面的方法都弄成同步的

方法:
1.promise
2.在http前面await,把http也弄成同步(好用)

面试题:
如果我有两个接口需要获取数据之后才能继续操作,怎么操作?
这里的这两个获取数据的接口就是两个异步操作,
把这两个异步放在promise中,
然后在then中会接收相应的返回的函数,
成功或失败都可以进行
做相应的操作。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值