2 异步

2021-02-04  本文已影响0人  卢卢2020

异步

如果能直接拿到结果  ===>>>>>>   那就是同步

比如你在医院挂号,你拿到号才会离开窗口 

同步任务可能消耗10毫秒,也可能需要3秒

总之不拿到结果你是不会离开的

如果不能直接拿到结果  ===>>>>>>  那就是异步

比如你在餐厅门口等位,你拿到号可以去逛街

什么时候才能真正吃饭呢 你不知道

所以你可以每10分钟去餐厅问一下(轮询)

你也可以扫码用微信接收通知(回调)

       ==>回调callback

你写给自己用的函数,不是回调

你写给别人用的函数,就是回调

request.onreadystatechange就是我写给浏览器用的

意思就是你(浏览器)回头调一下这个函数

在中文里,回头也有将来的意思 如我回头请你吃饭


       ==>回调举例

把函数1 给另一个函数2 

function f1(){}

function f2(fn){

fn()

}

f2(f1)

分析:

我调用f1没有? 答:没有调用

我把f1传给f2(别人)了没有?答:传了

f2调用f1了没有?答: f2调用了f1

那么, f1是不是我写给f2调用的函数?答:是

所以,f1是回调

异步和回调的关系

     ===>>>>关联

异步任务需要在得到结果时通知JS来拿结果

怎么通知   可以让JS留一个函数地址(电话号码)给浏览器

异步任务完成时浏览器调用该函数地址即可(拨打电话)

同时把结果作为参数传给该函数(电话里说可以来吃了)

这个函数是我写给浏览器调用的,所以是回调函数

     ===>>>区别

异步任务需要用到回调函数来通知结果

但回调函数不一定只用在异步任务里

回调可以用到同步任务里

比如:array.forEach(n=>console.log(n)) 就是同步回调 它一直调用n

    ===>>>> 判断同步异步

如果一个函数的返回值处于

setTimeout

AJAX(即XMLHttpRequest)

AddEventListener

这三个东西内部,那么这个函数就是异步函数(如果有别的再另说明)

AJAX也可以设置为同步? ===>>>> 傻X才把AJAX设置为同步,这样做会使请求期间页面卡住

异步总结

异步任务不能拿到结果

于是我们传一个回给异步任务

异步任务完成时调用回调

调用的时候把结果作为参数

上一篇下一篇

猜你喜欢

热点阅读