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

从零开始写一个符合PromisesA+规范promise

promise实例传入异步方法执行成功就执行注册成功回调函数,失败就执行注册失败回调函数。...,当promise reslove时,就把异步执行结果赋值给promise实例value,并把这个值传入成功回调中执行,失败就把异步执行失败原因赋值给promise实例error,并把这个值传入失败回调并执行...支持串行异步任务 我们上一节实现了链式调用,但是目前then方法里只能传入同步任务,但是我们平常用promise,then方法里一般是异步任务,因为我们用promise主要用来解决一组流程化异步操作,...如何既能保持这种链式写法同时又能使异步操作衔接执行呢?...这里很抽象,我们还是以文件顺序读取场景画一张图解释一下流程: 当执行p.then(f1).then(f2).then(f3)时: 先执行p.then(f1)返回了一个bridgePromise(p2

1.5K20

从零开始写一个符合PromisesA+规范promise

promise实例传入异步方法执行成功就执行注册成功回调函数,失败就执行注册失败回调函数。...,当promise reslove时,就把异步执行结果赋值给promise实例value,并把这个值传入成功回调中执行,失败就把异步执行失败原因赋值给promise实例error,并把这个值传入失败回调并执行...支持串行异步任务 我们上一节实现了链式调用,但是目前then方法里只能传入同步任务,但是我们平常用promise,then方法里一般是异步任务,因为我们用promise主要用来解决一组流程化异步操作,...如何既能保持这种链式写法同时又能使异步操作衔接执行呢?...这里很抽象,我们还是以文件顺序读取场景画一张图解释一下流程: 当执行p.then(f1).then(f2).then(f3)时: 先执行p.then(f1)返回了一个bridgePromise(p2

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

ES6 Promise 最佳实践

为了保持异步活动“线性”,我们可以使用async 函数[1]或线性链式 promises。...(换句话说,promise 链式任务是按顺序执行,译者注) 因此,让程序 "idle time(空闲时间)" 最小化关键是并发。...实际上,执行函数总是在构造 promise 时立即执行,从而阻塞事件循环执行程序函数返回后,将恢复顶层执行。...If this // is intentional, one would be better off // using `setImmediate`. }); 举例来说,如果执行程序函数不包含异步...创建 Promises 代价并不是"免费"。它们本身不触发 JavaScript 中 "并行性"。(也就是不会让代码执行更快,译者注) 它们只是用于调度和处理异步操作标准化抽象。

1.2K20

ECMAScript7 asyncawait 异步解决方案

图片 Async函数作为异步解决方案最优解,async/await特性能让我们编写出相比回调地狱和Promise链式调用更直观、更容易理解代码,Async函数返回一个Promise对象,可以使用then...()方法添加回调函数,当函数执行时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句 01 初识 async/await const fetch = require('node-fetch...catch (err) { console.error(err); } } showJianShuRequest('666666'); 06 使用 Promise.all() 实现多个异步操作并行...2].name}`); console.log(`bookname_2: ${data_2.notebooks[4].name}`); } showJianShuRequest(); 07 在循环中正确使用...JS :async/await 简明教程 三分钟学会用ES7中Async/Await进行异步编程 本篇内容到这里就全部结束了,源码我已经发到了GitHub async-await 上了,有需要同学可自行下载

61850

异步发展流程-手摸手带你实现一个Promise

promise三个状态之间关系? 如何实现promise链式调用? 如何判断并解决promise循环引用问题? 如何实现promisefinally方法?...then方法 更详细请移步文档,这里说几个重点 处理executor函数中代码异常情况 处理executor函数中代码为异步情况 处理then多次调用 处理then链式调用 处理executor...npm i -g promises-aplus-tests 执行检查 promises-aplus-tests your-promise.js 都是绿色表示检查通过 代码地址 promise周边 以上只是一个简易...function next (data) { // 使用迭代函数来实现 异步操作按顺序执行 let { value, done } = it.next(data) if(...value.then((data) => { next(data) },reject) } } next() }) } 使得异步可以按顺序执行

88420

Javascript -- Promise初探

Promise.finally()无论resolve还是reject都会触发 一些实现了promises/A+规范bluebird q rsvp vow when don't say, show...code 1 promise中then()会放到异步执行事件循环中,所以先往后执行,然后再执行事件循环队列中。...; } 第一次看没啥思路,看到秒脑子里反射出定时器,然后应该是递归因为它没说什么时候停,那第一步实现一个函数传入两个参数一个时间,一个函数,然后多少秒执行这个函数;第二步把具体秒数对于具体函数。...,一定是要链式,这样才符合顺序,所以,我们要做是怎样把它放到一条链上,这里用了等号赋值,其实相当于延长了Promise链式调用。...once再现,然后执行异步任务,注意两次输出res值,promise状态只能改变一次所以都是success,但是打出时间戳差值每台电脑可能不一样,能肯定是在1秒后也就是1000+。

51120

新手们容易在Promise上挖坑~

本文翻译至Nolan Lawson一篇博客——《We have a problem with promises》 关于Promise 大家通常认为Promise是ES6提供一个书写异步代码解决方案...一旦当他们要使用他们熟悉 forEach() 循环 (无论是 for 循环还是 while 循环),他们完全不知道如何将 promises 与其一起使。因此他们就会写下类似这样代码。 ?...这里问题在于第一个then之中并没有返回值,导致这个then会立即决议为undefined并执行第二个then中操作。...这个新 promise 会在数组中所有的 promises 都成功返回后才返回。他是异步 for 循环。...并且 Promise.all() 会将执行结果组成数组返回到下一个函数,比如当你希望从 PouchDB 中获取多个对象时,会非常有用。

1.4K50

记两道关于事件循环

然而 async2 里面包含了一个异步操作,在异步操作得到结果之前,其实是会跳出当前 async1 函数执行栈,优先去执行同步任务,所以这里其实会先执行 start,再去执行 async1 end。...之后,微任务队列中无任务,第二轮事件循环结束 第二轮事件循环: ① 宏任务:根据之前进队列顺序,宏任务队列中依次有 timer2、timer3 和 timer1 这几个定时器回调函数。...,但是好像又退回了 callback hell 恶心形式,所以这里要再改为 Promise 链式调用: async function readAll(paths){ const promises...,进入函数执行栈;通过 map 迭代数组,每一次迭代会立即执行 Promise 中执行器,进而执行 readFile 函数,由于 resolve 是位于异步回调函数中(尚未执行),所以这里返回是一个处于...从队头任务开始,6 个任务依次进入主栈并顺序执行。这里就会发现,前三个任务执行负责返回三个文件内容,后三个任务执行,每次都会打印一个文件内容和一个 4。

37220

promise执行顺序面试题令我头秃,你能作对几道

,所以会先输出 1,2,而 Promise.then() 内部代码在 当次 事件循环 结尾 立刻执行 ,所以会继续输出4,最后输出3。...Promise,按题目的要求我们只要顺序执行这三个函数就好了,然后把结果放到 data 中,但是这些函数里都是异步操作,想要按顺序执行,然后输出 1,2,3并没有那么简单,看个例子。...A,B 但是输出结果却是 b,a 对于这些异步函数来说,并不会按顺序执行完一个,再执行后一个。...,主要是需要理解 JS执行机制,才能很好解决这道题,对于 JS 执行机制不了解朋友推荐看看这篇文章这一次,彻底弄懂 JavaScript 执行机制第一轮事件循环执行宏任务,主script ,new...(promises) }).catch(err => { // 这里 catch 不仅用来捕获 前面 then 方法抛出错误 // 更重要是防止中断整个链式调用

39920

关于 ES6 中 Promise 面试题

,所以会先输出 1,2,而 Promise.then() 内部代码在 当次 事件循环 结尾 立刻执行 ,所以会继续输出4,最后输出3。...Promise,按题目的要求我们只要顺序执行这三个函数就好了,然后把结果放到 data 中,但是这些函数里都是异步操作,想要按顺序执行,然后输出 1,2,3并没有那么简单,看个例子。...A,B 但是输出结果却是 b,a 对于这些异步函数来说,并不会按顺序执行完一个,再执行后一个。...,主要是需要理解 JS执行机制,才能很好解决这道题,对于 JS 执行机制不了解朋友推荐看看这篇文章 这一次,彻底弄懂 JavaScript 执行机制 第一轮事件循环执行宏任务,主script ,...第二轮事件循环执行宏任务里面的,也就是 setTimeout 回调,输出【5】。 resolve(6) 不会生效,因为 p 这个 Promise 状态一旦改变就不会在改变了。

92020

看完这几道 Promise 面试题,还被面试官问倒算我输

,所以会先输出 1,2,而 Promise.then() 内部代码在 当次 事件循环 结尾 立刻执行 ,所以会继续输出4,最后输出3。...Promise,按题目的要求我们只要顺序执行这三个函数就好了,然后把结果放到 data 中,但是这些函数里都是异步操作,想要按顺序执行,然后输出 1,2,3并没有那么简单,看个例子。...A,B 但是输出结果却是 b,a 对于这些异步函数来说,并不会按顺序执行完一个,再执行后一个。...,主要是需要理解 JS执行机制,才能很好解决这道题 第一轮事件循环执行宏任务,主script ,new Promise立即执行,输出【3】, 执行 p 这个new Promise 操作,输出【7】...第二轮事件循环执行宏任务里面的,也就是 setTimeout 回调,输出【5】。 resolve(6) 不会生效,因为 p 这个 Promise 状态一旦改变就不会在改变了。

79720

关于 ES6 中 Promise 面试题

,所以会先输出 1,2,而 Promise.then() 内部代码在 当次 事件循环 结尾 立刻执行 ,所以会继续输出4,最后输出3。...Promise,按题目的要求我们只要顺序执行这三个函数就好了,然后把结果放到 data 中,但是这些函数里都是异步操作,想要按顺序执行,然后输出 1,2,3并没有那么简单,看个例子。...A,B 但是输出结果却是 b,a 对于这些异步函数来说,并不会按顺序执行完一个,再执行后一个。...,主要是需要理解 JS执行机制,才能很好解决这道题,对于 JS 执行机制不了解朋友推荐看看这篇文章 这一次,彻底弄懂 JavaScript 执行机制 第一轮事件循环执行宏任务,主script ,...第二轮事件循环执行宏任务里面的,也就是 setTimeout 回调,输出【5】。 resolve(6) 不会生效,因为 p 这个 Promise 状态一旦改变就不会在改变了。

1.2K10

promise执行顺序面试题令我头秃

,所以会先输出 1,2,而 Promise.then() 内部代码在 当次 事件循环 结尾 立刻执行 ,所以会继续输出4,最后输出3。...Promise,按题目的要求我们只要顺序执行这三个函数就好了,然后把结果放到 data 中,但是这些函数里都是异步操作,想要按顺序执行,然后输出 1,2,3并没有那么简单,看个例子。...A,B 但是输出结果却是 b,a 对于这些异步函数来说,并不会按顺序执行完一个,再执行后一个。...,主要是需要理解 JS执行机制,才能很好解决这道题,对于 JS 执行机制不了解朋友推荐看看这篇文章这一次,彻底弄懂 JavaScript 执行机制第一轮事件循环执行宏任务,主script ,new...(promises) }).catch(err => { // 这里 catch 不仅用来捕获 前面 then 方法抛出错误 // 更重要是防止中断整个链式调用

50820

JS魔法堂:剖析源码理解PromisesA规范

一、前言                                 Promises/A是由CommonJS组织制定异步模式编程规范,有不少库已根据该规范及后来经改进Promises/A+规范提供了实现...下面我们看一下使用Promises/A规范异步模式编码方式吧!...,但如果现在需求改为循环10次执行非连续移动呢?...直觉思维分解上述句子会得出以下任务及顺序:下班->搭车->到幼儿园(小学等)接小孩->(走路)回家。可以看到这种思维方式是任务+执行顺序,丝毫没有带任务间时间距离。...因此回调函数异步模式与我们思维模式相距甚远,那么如何做到即告诉程序任务间时间距离,又从代码结构上淡化这种时间距离感呢?而Promise就是其中一种方式了!

1.2K110

JS:你真的会用 Promise 吗?

这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现结果 promise 对象。...每一次事件循环中,主进程都会先执行一个MacroTask 任务,这个任务就来自于所谓MacroTask Queue队列;当该 MacroTask 执行完后,Event loop 会立马调用 MicroTask...fn将会在 // 本轮事件循环结束时执行,而不是下一轮事件循环开始时执行; // 3. setTimeout属于macroTask,是在下一轮事件循环执行; //答案: // 2 3 5 4...,所以先输出 4; // 2. p1和p2Promise在执行then之前都已处于resolve状态, // 故按照then执行先后顺序,将t1、t2放入microTask中等待执行; //...+ 是 ES6 Promises 前身,而且网络上有很多可供学习、参考开源实现(例如:Adehun、bluebird、Q、ypromise等)。

2.6K30

JS:深入理解Promise

Promise是异步编程一个解决方案,相比传统“回调函数”方法,使用Promise更为合理和强大,避免了回调函数之间层层嵌套,也使得代码结构更为清晰,便于维护。 ?...前身,而且网络上有很多可供学习、参考开源实现(例如:Adehun、bluebird、Q、ypromise等)。...注:_notify函数用作异步执行传入函数数组以及参数;代码中将_callbacks、_errbacks传给_notify函数后立即清空,是为了保证_callbacks、_errbacks至多被执行一次...正确性 A.第1步:安装Promise/A+测试工具 npm install –save promises-aplus-tests 注:这里采用局部安装,后面需要通过npx命令执行; ?...C.第3步:执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ? ----

1.3K40
领券