摘要:异步找到书前一个任务完成就回电话执行回调函数,而后一个任务找书不管前一个任务是否完成都会开始。回调函数回调函数是实现异步编程的最基本的方法。
JavaScript语言的执行环境是单线程的,即是一次只能完成一个任务,其他任务排队等候执行。只有当前一个任务完成时,才能开始进行下一个任务。
这种模式的执行环境简单,若是遇到一个耗时较长的任务,将会拖延整个程序的执行。
为了解决这个问题,我们有同步和异步两种任务的执行模式:
同步模式即上述所说的单线程模式; 异步模式:每个任务都有回调函数(callback), 前一个任务结束后,不是执行后一个任务,而是执行回调函数, 后一个任务则是不等前一个任务结束就执行, 所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
小剧场:
顾客1(打电话): 老板,我要买本小黄书,你有吗? 老板: 我找找,一会儿给你回电话。( 老板干其他事情。) 顾客2(打电话): 老板,我要买本红包书,你有吗? 老板: 我找找,一会儿给你回电话。( 老板干其他事情。) ………… 找到书,老板回电话。
剧场说明
其中回电话就是我们的回调函数,而找书就是任务。 异步: 找到书(前一个任务完成)就回电话(执行回调函数), 而后一个任务(找书)不管前一个任务是否完成都会开始。 同步: 老板接了电话就开始找书(保持通话状态), 直到书找到满足顾客1的需求, 顾客2的电话才能打得进来。
回调函数:
回调函数是实现异步编程的最基本的方法。我们假设有两个函数f1()和f2(),f1()执行完成后才能执行f2():
f1(); f2();
假设f1()是一个很耗时的任务,那么我们可以考虑异步机制,改写f1(),将f2改写为f1()的回调函数:
function f1 (callback) { setTimeout(function () { callback()},1000); } f1(f2);
采用这种方式,我们把同步操作变成了异步操作,f1不会堵塞程序的运行,也就是说我们先执行程序的主要逻辑,将耗时的操作推迟执行。
欢迎讨论和指出不足^_^
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89792.html
摘要:到这里,我已经发出了一个请求买汉堡,启动了一次交易。但是做汉堡需要时间,我不能马上得到这个汉堡,收银员给我一个收据来代替汉堡。到这里,收据就是一个承诺保证我最后能得到汉堡。 同期异步系列文章推荐谈一谈javascript异步javascript异步中的回调javascript异步之Promise.all()、Promise.race()、Promise.finally()javascr...
摘要:回调函数,一般在同步情境下是最后执行的,而在异步情境下有可能不执行,因为事件没有被触发或者条件不满足。同步方式请求异步同步请求当请求开始发送时,浏览器事件线程通知主线程,让线程发送数据请求,主线程收到 一直以来都知道JavaScript是一门单线程语言,在笔试过程中不断的遇到一些输出结果的问题,考量的是对异步编程掌握情况。一般被问到异步的时候脑子里第一反应就是Ajax,setTimse...
摘要:如果你把函数的指针地址作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 同期异步系列文章推荐谈一谈javascript异步javascript异步与promisejavascript异步之Promise.all()、Promise.ra...
摘要:调用栈被清空,消息队列中并无任务,线程停止,事件循环结束。不确定的时间点请求返回,将设定好的回调函数放入消息队列。调用栈执行完毕执行消息队列任务。请求并发回调函数执行顺序无法确定。 异步编程 JavaScript中异步编程问题可以说是基础中的重点,也是比较难理解的地方。首先要弄懂的是什么叫异步? 我们的代码在执行的时候是从上到下按顺序执行,一段代码执行了之后才会执行下一段代码,这种方式...
阅读 3159·2021-11-19 09:40
阅读 3647·2021-11-16 11:52
阅读 2980·2021-11-11 16:55
阅读 3170·2019-08-30 15:55
阅读 1176·2019-08-30 13:08
阅读 1655·2019-08-29 17:03
阅读 3011·2019-08-29 16:19
阅读 2579·2019-08-29 13:43