首页
学习
活动
专区
圈层
工具
发布

ES6中的Promise对象作用

尤其是如果页面ajax使用较多且数据互相依赖时,使用发布订阅模式进行数据获取与DOM操作,非常舒服。...console.log(4); 12}) 13console.log(5); 14 15// 5 4 1 2 3 上述行文与代码的结论简单表述是,在js加载时,在加载js脚本script文件后,先执行同步任务,当同步任务都执行完毕后...,再执行异步任务中的微任务,当微任务都执行完毕后,再执行异步任务中的宏任务。...需要注意的是,在getJSON内部,resolve函数和reject函数调用时,都带有参数。 如果调用resolve函数和reject函数时带有参数,那么它们的参数会被传递给回调函数。...这是因为立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务。

1.1K20

Ajax 请求的五大步骤

Ajax 的工作原理 Ajax 的工作原理相当关于在用户和服务器之间加了一个中间层(Ajax 引擎),使用户操作与服务器响应异步化,并不是所有的用户请求都提交给服务器。...像一些数据验证和数据处理等都交给Ajax 引擎自己来做,只有确定需要从服务器读取新数据时再由Ajax 引擎代为向服务器提交请求。...如果这个参数为 false,代表请求是同步的,后续对 send() 的调用将阻塞,直到响应完全接受;如果这个参数是 true 或省略,请求是异步的,且通常需要一个 onreadystatechange...如果指定了,它们会覆盖 url 自己指定的任何资格。...Web服务器接收完数据并进行处理完毕之后,向客户端传送返回的结果。此时,XMLHttpRequest对象处于接收数据状态,XMLHttpRequest对象的readyState属性值为3。

92730
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS异步编程

    什么是异步 同步(sync)是一件事一件事的执行,只有前一个任务执行完毕才能执行后一个任务。异步(async)相对于同步,程序无须按照代码顺序自上而下的执行。...发布/订阅模式 在发布/订阅模式中,想象有一个类似消息中心的地方,可以在消息中心“注册”一条消息,然后就会有若干对这消息感兴趣的人“订阅”,一旦该消息被“发布”,所有”订阅“了该消息的用户都会得到提醒。...2、当这个异步任务有了运行结果,Event Table会将这个回调函数移入Event Queue,进入等待状态。...事件循环的顺序,决定js代码的执行顺序。进入整体代码(宏任务)后,开始第一次循环,接着执行所有的微任务,然后再从宏任务开始,找到其中一个任务队列执行完毕,在执行所有的微任务。...Node的Event Loop分为六个阶段,它们会按照顺序反复执行。每当进入一个阶段的时候,都会从对应的回调队列中取出函数去执行。

    3.9K30

    JS是单线程,你了解其运行机制吗?

    当消息队列为空时,就会等待直到消息队列变成非空。而且主线程只有在将当前的消息执行完成后,才会去取下一个消息。这种机制就叫做事件循环机制,取一个消息并执行的过程叫做一次循环。...在渲染之前 所以它的响应速度相比setTimeout(setTimeout是task)会更快,因为无需等渲染 也就是说,在某一个macrotask执行完后,就会将在它执行期间产生的所有microtask都执行完毕...之后的setTimeout和process.nextTick2属于第二个循环 别看上面那段代码好像特别绕,把原理弄清楚了,都一样 ~ requestAnimationFrame、Object.observe...image 上图大致描述就是: 主线程运行时会产生执行栈,栈中的代码调用某些api时,它们会在事件队列中添加各种事件(当满足触发条件后,如ajax请求完毕) 而栈中的代码执行完毕,就会读取事件队列中的事件...,去执行那些回调 如此循环 注意,总是要等待栈中的代码执行完毕后才会去读取事件队列中的事件 五.

    2.4K20

    js事件循环机制和优先级

    定时器触发线程 异步http请求线程 主执行栈和任务队列 所有的任务可以分为同步任务和异步任务,同步任务,顾名思义,就是立即执行的任务,同步任务一般会直接进入到主线程中执行;而异步任务,就是异步执行的任务,比如ajax...主线程内的任务执行完毕为空,会去 Event Queue 读取对应的任务,推入主线程执行。 上述过程的不断重复就是我们说的 Event Loop (事件循环)。...也就是说,在某一个macrotask执行完后,就会将在它执行期间产生的所有microtask都执行完毕(在渲染前)。...microtask主要包含:Promise.then、MutaionObserver、process.nextTick(Node.js 环境) 它们的执行顺序如下: 在事件循环中,每进行一次循环操作称为...; 循环往复,直到两个queue中的任务都取完。

    1.8K20

    JS 面试题 大全

    36.请描述event loop(事件循环、事件轮询)的机制,可画图? ①.js是单线程的,异步要基于回调来实现,event loop(事件循环/事件轮询)就是异步回调的实现原理。...首先我们需要明白js是如何执行的:从前到后,一行一行执行,如果某一行执行报错了,则停止下面代码的执行,先将同步代码执行完毕,再执行异步代码。...)遇到异步代码,先记录下在web API中,等待时机(定时、网络请求等) (3)时机到了,就移动到callback queue(回调队列)中 (4)如果 call stack 为空(即同步代码执行完毕...) event loop 开始工作 (5)轮询查找 callback queue, 如有则移动到call stack执行 (6)然后继续轮询查找,直到完成 ②.DOM事件 和 event loop...40、event loop 和 DOM渲染 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174726.html原文链接:https://javaforall.cn

    2K30

    也谈如何构建高性能服务端程序

    另外一种是,每当我们收到一个用户发布的冒泡时,都重新构建这个缓存,用户每次查看冒泡列表都是取的缓存数据。...就是不在第一时间告知调用者结果,告诉他我已经收到这个任务了,我会处理,处理完毕后通知你结果,如果你不是等不到结果就无法进行下去的话,你完全可以先干别的事情。 嗯,好像我描述的比较拉杂。...服务端程序设计往往也是这样,在你等待一个很缓慢的过程的时候,如果你不是必须要得到这个过程的结果才能继续下去,你完全可以先进行别的过程,等到那个缓慢的过程执行完毕后,它会通知你结果的。...异步已经在现在的各种编程领域有了很广泛的应用,例如 Ajax 技术,就是一种异步的手段,在浏览器和服务器交互的时候,完全不影响你在网页上的其他操作。...依然是例子:需要计算网站上某一批用户的活跃度积分,传统的,我们会查出这一批用户,然后写一个循环,然后轮流计算他们的积分,最后得到结果。

    46030

    浅谈JS线程

    我们都知道JavaScript是单线程的,也就是说,同一个时间只能做一件事。说是为了避免复杂性,所以JavaScript从诞生就是单线程,将来也不会改变。...同步任务,前一个任务执行完毕后,执行后一个任务,形成一个执行栈。 异步任务,也就是任务队列会先执行,有了结果就会返回一个事件,等待主线程读取。...当主线程的同步执行完毕,就是主线程空了,那么就会读取任务队列。任务队列的结构是先进先出,当主线程读取了一个任务队列,那么这个主线程就会继续读取下一个任务队列,循环往复,直到执行完毕所有任务。...不同的是,JavaScript可以进行异步操作,一般一步操作有点击事件、定时器、ajax,所以有可能在读取任务队列的时候要到了规定时间或者是执行完了,主线程才会依次执行这些对应的回调函数。...,也就没办法执行完毕,那么下一个任务队列的线程就无法执行到。

    93020

    JavaScript 异步编程

    但浏览器定义了非同步的 Web APIs,将回调函数插入到事件循环,实现异步任务的非阻塞执行。...因为回调的控制权在第三方(如 Ajax),由第三方来调用回调函数,无法确定调用是否符合预期。 多层嵌套回调会产生回调地狱(callback hell)。 2....async/await 也存在问题:await 关键字会阻塞其后的代码,直到 Promise 完成,就像执行同步操作一样。它可以允许其他任务在此期间继续运行,但自己的代码会被阻塞。...解决方案是将 Promise 对象存储在变量中来同时开始,然后等待它们全部执行完毕。具体参照 fast async await。...如果内部的 await 等待的异步任务之间没有依赖关系,且需要获取这些异步操作的结果,可以使用 Promise.allSettled() 同时执行这些任务并获得结果。 7.

    1.4K00

    js异步机制

    同步 如果在函数返回的时候,调用者就能够得到预期结果(即拿到了预期的返回值或者看到了预期的效果),那么这个函数就是同步的。 2....异步 如果在函数返回的时候,调用者还不能够得到预期结果,而是需要在将来通过一定的手段得到,那么这个函数就是异步的。...这一切的解释继续用继续了解消息队列和事件循环。 一旦某个异步任务有了响应就会被推入队列中。如用户的点击事件、浏览器收到服务的响应和setTimeout中待执行的事件,每个异步都和回调函数相关联。...JS引擎线程从消息队列中读取任务是不断循环的,每次栈被清空后,都会在消息队列中的读取新的任务,如果没有新的任务,就会等待,直到有新的任务,这就叫事件循环。...发起异步任务后,由AJAx线程执行耗时的异步操作,而JS引擎线程继续执行堆中的其他同步任务,直到堆中的所有异步任务执行完毕。

    3.1K40

    js面试基本都会面的一道题,值得你了解和掌握!

    而这些队列由js的事件循环(EventLoop)来搞定 macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。...请求不属于宏任务,js线程遇到ajax请求,会将请求交给对应的http线程处理,一旦请求返回结果,就会将对应的回调放入宏任务队列,等请求完成执行。...执行过程中遇到上边提到的调度者,会同步执行调度者,由调度者将其负责的任务(回调函数)放到对应的任务队列中,直到主执行栈清空,然后开始执行微任务的任务队列。...,检查微任务队列,发现有一段第二步放进去的代码,执行打印第二次循环的微任务队列的微任务执行,此时第一个宏任务执行完毕 开始执行第二个宏任务,打印第二次循环的宏任务队列的第二个宏任务执行,所有任务队列全部清空...,执行完毕 所以打印顺序为: 第一次循环主执行栈开始 第一次循环主执行栈进行中...

    42400

    js面试基本都会面的一道题,值得你了解和掌握!

    而这些队列由js的事件循环(EventLoop)来搞定 macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。...请求不属于宏任务,js线程遇到ajax请求,会将请求交给对应的http线程处理,一旦请求返回结果,就会将对应的回调放入宏任务队列,等请求完成执行。...执行过程中遇到上边提到的调度者,会同步执行调度者,由调度者将其负责的任务(回调函数)放到对应的任务队列中,直到主执行栈清空,然后开始执行微任务的任务队列。...,检查微任务队列,发现有一段第二步放进去的代码,执行打印第二次循环的微任务队列的微任务执行,此时第一个宏任务执行完毕 开始执行第二个宏任务,打印第二次循环的宏任务队列的第二个宏任务执行,所有任务队列全部清空...,执行完毕 所以打印顺序为: 第一次循环主执行栈开始 第一次循环主执行栈进行中...

    41820

    异步与回调函数的作用域链

    只有前一个任务执行完毕,才能执行后一个任务。 异步任务是那些被引擎放在一边,不进入主线程、而进入任务队列的任务。...如果是同步任务,主线程就等着 Ajax 操作返回结果,再往下执行;如果是异步任务,主线程在发出 Ajax 请求以后,就直接往下执行,等到 Ajax 操作有了结果,主线程再执行对应的回调函数。...这种循环检查的机制,就叫做事件循环(Event Loop)。...意思就是不管请求相应多久,都等着,直到响应接收到,然后返回给这个创建的变量response.如果从发送请求到拿到相应用了2s,那么代码就停在这里了2s....所以$.ajax()返回的结果是一个承诺,不是结果,因为结果还没有到来 使用回调函数 使用回调要用这样的形式 fn(参数1,参数2,()=>{ 回调函数(xxx,xxx,()=>{}) }) 不要用

    2.3K40

    深入理解Javascript单线程谈Event Loop

    例如ajax异步请求是由JS执行线程和异步http请求线程,事件触发线程共同完成的。 6.事件循环机制(Event Loop)   6.1:栈     函数调用形成一个栈帧。...这就形成了事件循环 结论:Javascript的事件分同步任务和异步任务,遇到同步任务就放在执行栈中执行,而碰到异步任务就放到任务队列之中,等到执行栈执行完毕之后再去执行任务队列之中的事件。...它被添加进任务队列,因此要等到同步任务和任务队列中的前一个事件都处理完,才会执行。 13.ajax异步请求是否真的异步?   ...详细的例子,可以参考MDN文档对ajax的描述:同步和异步 误解:事件循环类似栈或队列   这里顺带提一下:事件循环虽然涉及到类似队列的结构,并不是采用栈的方式处理任务。...事件循环作为一个进程被划分为多个阶段,每个阶段处理一些特定任务,各阶段轮询调度。这些阶段可以是定时器处理,dom事件处理,ajax异步处理......

    1.8K10

    前端面试指南之JS面试题总结2

    变量或函数的执行上下文,决定了它们的行为以及可以访问哪些数据。...常用的异步场景有:定时器、ajax请求、事件绑定。15. JS是如何实现异步的?JS引擎是单线程的,但又能实现异步的原因在于事件循环和任务队列体系。...而事件循环是主线程中执行栈里的代码执行完毕之后,才开始执行的。所以,主线程中要执行的代码时间过长,会阻塞事件循环的执行,也就会阻塞异步操作的执行。...只有当主线程中执行栈为空的时候(即同步代码执行完后),才会进行事件循环来观察要执行的事件回调,当事件循环检测到任务队列中有事件就取出相关回调放入执行栈中由主线程执行。 16. 什么是AJAX?...——>直到任务全部完成 20. 什么是跨域?怎么解决跨域问题?

    1.1K20

    一篇文章彻底搞懂异步,同步,setTimeout,Promise,async「建议收藏」

    5.输出:script end 前五个我们都分析完毕了,接下来到关键点了: 现在异步队列中有三个任务分别是: setTimeout async1的后续内容 promise的.then内容 这三个内容setTimeout...所以结果很明显了,它们三个的输出顺序是: 6.输出:async1 end 7.输出:promise2 8.输出:setTimeout 在给朋友们随便写一个代码,大家一起猜一下执行结果会是什么: setTimeout...: 小总结: 其实这个就是涉及了JavaScript的Event Loop【事件循环】 上图就是JS事件循环的全过程。...中的所有任务都执行完毕。...注意,如果在执行microtask的过程中,又产生了microtask,那么会加入到队列的末尾,也会在这个周期被调用执行; microtask queue中的所有任务都执行完毕,此时microtask

    1.1K10

    前端面试指南--JS面试题总结

    变量或函数的执行上下文,决定了它们的行为以及可以访问哪些数据。...常用的异步场景有:定时器、ajax请求、事件绑定。15. JS是如何实现异步的?JS引擎是单线程的,但又能实现异步的原因在于事件循环和任务队列体系。...而事件循环是主线程中执行栈里的代码执行完毕之后,才开始执行的。所以,主线程中要执行的代码时间过长,会阻塞事件循环的执行,也就会阻塞异步操作的执行。...只有当主线程中执行栈为空的时候(即同步代码执行完后),才会进行事件循环来观察要执行的事件回调,当事件循环检测到任务队列中有事件就取出相关回调放入执行栈中由主线程执行。 16. 什么是AJAX?...——>直到任务全部完成 20. 什么是跨域?怎么解决跨域问题?

    1.2K30

    前端面试指南之JS面试题总结

    变量或函数的执行上下文,决定了它们的行为以及可以访问哪些数据。...常用的异步场景有:定时器、ajax请求、事件绑定。15. JS是如何实现异步的?JS引擎是单线程的,但又能实现异步的原因在于事件循环和任务队列体系。...而事件循环是主线程中执行栈里的代码执行完毕之后,才开始执行的。所以,主线程中要执行的代码时间过长,会阻塞事件循环的执行,也就会阻塞异步操作的执行。...只有当主线程中执行栈为空的时候(即同步代码执行完后),才会进行事件循环来观察要执行的事件回调,当事件循环检测到任务队列中有事件就取出相关回调放入执行栈中由主线程执行。 16. 什么是AJAX?...——>直到任务全部完成 20. 什么是跨域?怎么解决跨域问题?

    1.1K00

    Selenium面试题

    3.不同方式进行定位,与expected_conditions判断方法封装,循环判断页面元素出现后再操作; 4.开发人员规范开发习惯,如给页面元素加上唯一的name,id等。...Xpath是通过相对位置定位 如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。 NO.10 如何去定位页面上动态加载的元素?.../following-sibling/percent-sibling NO.12 点击链接以后,selenium是否会自动等待该页面加载完毕?...driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client. NO.22 webdriver的协议是什么?...隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。 显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你可以设置它来等待任何条件。

    7.6K30
    领券