首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Promise、setTimeout执行顺序

同步和异步任务 ​ 要了解异步线程我们首先应该明白它用处,因为js单线程特性,任务执行顺序都是依次执行,而当我们在工作遇到网络请求,前后端交互时候,你数据不会马上拿到,这需要时间,如果等拿到数据再执行下面的代码...-同步任务进入主线程,顺序从上而下依次执行, -异步任务,进入`event table` ,注册回调函数 `callback` , 任务完成后,将`callback`移入`event queue`中等待主线程调用...1.3.4.2 ,我们首先找到同步任务,1 3 是同步任务,然后执行异步任务,异步任务如果顺序执行则是24 但是答案是4.2那么我们可以知道 promise执行顺序优先于setTimeout所以由此可知...event queue ,macro Task event queue 记一个任务 setTimeout1 然后碰到 promise 微任务, 直接执行 new Promise 输出 5, 并将...then 函数回调函数推入 micro Task event queue , micro Task event queue 记 一个 微任务 promise1 又遇到了 setTimeout

63520

JavaScriptPromise使用详解

那么如何解决地狱回调,保持我们代码简短,这时Promise就出场了,Promise对象可以理解为一次执行异步操作,使用Promise对象之后可以使用一种链式调用方式来组织代码;让代码更加直观。...Promise正如字面意思-承诺,“承诺将来会执行”约定事情。我们首先需要了解Promise三种状态: pending: 初始状态,既不是成功,也不是失败状态。...Resolve函数作用是,将Promise对象状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作结果,作为参数传递出去; Reject...函数作用是,将Promise对象状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出错误,作为参数传递出去。...Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态回调函数。

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

十、promise使用

Promise用来做什么 用来解决回调地狱。回调地狱也就是回调函数嵌套了回调函数,代码阅读性低。...Promise原理 Promise对象代表一个异步操作,有三种状态:pending(进行)、fulfilled(已成功)和rejected(已失败)。...Module语法 使用模块好处 避免变量污染,命名冲突 提供代码复用率、维护性 依赖关系管理 export命令:用于规定模块对外接口 外部能够读取模块内部某个变量、函数、类 使用as关键字重命名...除了块作用域内 import命令:用于输入其他模块提供功能 变量、函数 使用as关键字 输入变量都是只读 import命令具有提升效果 注意:module是静态导入,因此不能使用表达式和变量那些运行时才能知道结果变量...在上面的三个文件,import.js需要使用export.hs变量,而export.js又需要使用public.js变量。此时可以使用复合写法。

64430

settimeout(fn 0)与Promise执行顺序

而settimeout(fn, 0)表示立即执行,也就是用来改变任务执行顺序,要求浏览器”尽可能快“进行回调。 2. promise何时执行?...其实,setTimeout有个最小执行时间(minimum delay of 4ms ),并不是0s执行。 注:HTML5已经将最小执行时间统一为4ms。...接着, 会先执行 macrotask 第一个任务(整个 script同步代码 ),再加上promise 构造函数也是同步promise.then 回调被推进到 microtask 队列),...所以会先打印出2 10 3,然后继续执行末尾,打印出5 此时,已经执行完了第一个 macrotask , 所以接下来会顺序执行所有的 microtask, 也就是 promise.then 回调函数...此时,microtask 队列任务已经执行完毕,所以执行剩下 macrotask 队列任务,也就是 setTimeout, 所以打印出 1.

1.3K30

Promisethen链机制

---->我们应该去执行onfulfilled或者onrejected,但是不是立即执行,它是一个异步微任务首先,把执行对应方法这个事情放在WebAPI监听,但是因为此时已经知道状态了,对应方法可以执行...;执行Promise.all返回一个新promise实例@p并且传递一个数组,数组包含n多其他promise实例如果数组每一个promise实例最后都是成功状态,则@p也会是成功,它值也是一个数组...,按照“最开始顺序”(不会考虑谁先成功)依次存储各个promise实例结果;但凡数组某个promise实例是失败(只要遇到一个失败,后面不在处理了)。...则@p也是失败,值是当前这个实例失败原因!如果数组中有一项并不是promise实例(例如:是个100),则浏览器也会把其默认变为一个状态是成功promise实例,值就是当前项本身。...promise,则会把返回值变为一个promise实例:状态 -> 成功,值 -> 返回值如果函数执行报错,则返回实例,状态 -> 成功,值 -> 报错原因async最主要作用就是:如果想在函数中使用

12520

关于 JavaScript Promise

链式调用(Chained Promise)链式调用(Chained Promise)是一种用于处理异步操作序列技术,在JavaScript,它允许顺序执行多个异步操作,并且可以在每个操作完成后执行下一个操作...然后,返回获取数据以便后续操作。在调用 fetchData() 函数代码,可以使用 .then() 方法来处理成功获取数据后进一步操作,并使用 .catch() 方法来捕获可能错误。...在 Bluebird 帮助下,使用Promise.cancel()方法实现了 Promise 取消。此方法不是标准 Promise API 一部分,而是特定于 Bluebird。...这样,使用 Promise.all() 方法可以很方便地在 JavaScript 并行处理多个 Promise,提高了异步操作效率。...更好代码组织: Promise 提供了一种将异步操作组织成清晰顺序方式,使得代码逻辑更加组织有序,易于理解和维护。

45363

Promise使用方法

一、Promise有以下三种状态: pending: 初始状态,既不是成功,也不是失败状态 , ( 等待 , 或者进行 , 表示还没有得到结果 ) fulfilled: 意味着操作成功。...注意:Promise一旦新建就会「立即执行」,无法取消。这也是它缺点之一。 二、我们使用new来构建一个Promise。...data为:字符串‘成功’ 或者字符串‘失败’ 如果异步操作获得了我们想要结果,那我们将手动调用resolve函数,在then第一个作为参数匿名函数可以获取数据,如果我们得到了错误结果,调用reject...函数,在then函数第二个作为参数匿名函数获取错误处理数据。...(前提是:.thenonRejected函数没有做任何处理) 补充~: 1).catch与.thenonRejected函数冲突,如果前面.then中出行了onRejected函数,.catch

93310

iOS Promise 设计模式

那我用闭包来举一个例子:我们需要顺序执行Task A、B、C 三个任务,A、B、C依次执行,任务完成之后都使用闭包来回调并开始下一个任务。...Promise 使用 then 作为关键字,回调最终结果。 then 是整个Promise设计模式核心,必须要被实现。...另外还有其它几个关键字用来表示一个Promise对象状态: pending: 任务执行,状态可能会进入下面的fullfill或者reject二者之一 fufill/resolved: 任务完成了,返回结果...(), block); }; } 如果对Block不是很熟悉,可能不太理解这段代码,实际上,PromiseKit灵活使用了Block作为函数返回值来实现链式调用。...上面的函数,有一个dispatchBarrierSync,barrier是栅栏意思,一般来说如果我们有多个异步任务,但是希望他们按照一定顺序执行,就可以使用这个方法。

1.4K00
领券