美文网首页
异步和回调

异步和回调

作者: 饥人谷_折纸大师 | 来源:发表于2022-07-31 10:58 被阅读0次

JS异步编程原型

如果能直接拿到结果就是同步
如果不能直接拿到结果就是异步


异步

以AJAX为例

  • request.send() 之后,并不能直接得到 response
  • 必须等到 readyState 变为 4 后,浏览器回头调用 request.onreadystatechange
  • 函数 我们才能得到 request.response

回调callback

写给别人用的函数就是回调
代码举例:

function f1() {}
function f2(fn) {
fn();
}
f2(f1);//f2调用了f1

f1就是回调

异步和回调的关系

关联

  • 异步任务需要在得到结果时通知 JS 来拿结果
  • 怎么通知呢?
  • 可以让 JS 留一个函数地址给浏览器
  • 异步任务完成时浏览器调用该函数地址即可
  • 同时把结果作为参数传给该函数
  • 这个函数是我写给浏览器调用的,所以是回调函数

区别

  • 异步任务需要用到回调函数来通知结果
  • 但回调函数不一定只用在异步任务里
  • 回调可以用到同步任务里
  • array.forEach( n => console.log(n) ) 就是同步回调

如何判断是否是异步

如果一个函数的返回值处于setTimeout、AJAX(即XMLHttpRequest)、addEventListener这三个的内部,那么这个函数就是异步函数

举个例子:

//摇骰子例子
function 摇骰子() {
setTimeout(() => {
//箭头函数
return parseInt(Math.random() * 6) + 1; //随机1~6的整数
}, 1000);
//return undefined
}

摇骰子()没有return 所以返回undefined,箭头函数有返回值,返回真正的结果
所以这是一个异步函数

//摇骰子例子续
const n = 摇骰子();
console.log(n); // undefined
//如何能拿到异步结果呢?使用回调
摇骰子((x) => {
console.log(x);
});//x就是我们要的点数,把这个函数传给摇骰子()
//可以简化为「摇骰子(console.log)」参数一致才能简化
function 摇骰子(fn) {
setTimeout(() => {
// 箭头函数
fn(parseInt(Math.random() * 6) + 1);
}, 1000);
}

小结

  • 异步任务不能拿到结果
  • 于是我们传一个回调给异步任务
  • 异步任务完成时调用回调
  • 调用的时候把结果作为参数

相关文章

  • 04-Node 异步编程

    Node 异步编程同步方法和异步方法异步 API 的执行顺序异步编程回调地狱问题Promise 改造回调地狱代码a...

  • 异步和回调

    什么是同步和异步 先来看一段代码 代码执行的结果如上所示为1,3,2 很明显与书写的顺序1,2,3不一致,所以我...

  • 异步和回调

    异步 异步就是「不等结果」,直接进行下一步怎么拿到结果回调可以拿到结果 回调 「回调是一种拿异步结果的方式」「回调...

  • 异步和回调

    JS异步编程原型 如果能直接拿到结果就是同步如果不能直接拿到结果就是异步 异步 以AJAX为例 request.s...

  • 异步的实现

    异步的三种实现方式: 回调函数事件Promise 回调函数 回调函数不一定是异步 但是异步一定是回调函数。 事件 ...

  • 同步、异步

    同步:等待结果异步:不等待结果 注意,异步常常伴随回调一起出现,但是异步不是回调,回调也不一定是异步。 【时序图】...

  • Promise用法总结

    Promise前置储备知识: 函数对象和实例对象(简称对象)同步回调和异步回调(异步回调会将要执行代码块放入队列)...

  • 你不知道的JS(中卷)第七章

    第七章 回调 回调是js异步的基本单元。随着js越来越成熟,对于异步编程的发展,回调已经不够用了。回调表达异步流的...

  • Dart 语法

    回调 dart定义回调 dart使用回调 延时 异步

  • nodeJS回调函数

    NodeJS异步编程的直接体现就是回调函数。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。回调函...

网友评论

      本文标题:异步和回调

      本文链接:https://www.haomeiwen.com/subject/ymrkwrtx.html