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

Promise杂记 前言APIPromise特点状态追随V8中的async awaitPromise实现一个Promise参考

更好的阅度体验 前言 API Promise特点 状态跟随 V8中的async awaitPromise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise...刚好最近阅读了V8团队的一篇如何实现更快的async await,借着这个机会整理了Promise的相关理解。...Promise.resolve() --将现有对象转为 Promise 对象 --参数是promise实例, 原封不动的返回 --参数是一个thenable对象 将这个对象转为 Promise 对象...一旦状态被改变,就不会再变,任何时候都能得到这个结果,与事件回调不同,事件回调在事件过去后无法再调用函数。 3. 一个promise一旦resolved,再次resolve/reject将失效。...// true 因为直接返回了p,所以省去了中间两个microtask任务,并且输出的顺序也变得正常,也就是V8所说的更快的async await 实现一个Promise 先实现一个基础的函数 function

1.1K20

优雅的异步编程版本答案asyncawait解析

​ 目录 什么是aysnc和await 为什么要用async aysnc函数解决了什么 async 函数的优点 怎么使用async函数 async函数语法 await语法 错误处理 async+await...为什么要用async 为了使我们的异步代码,更像同步的代码 aysnc函数解决了什么 在async/await之前,我们有三种方式写异步代码 嵌套回调 以Promise为主的链式回调 使用...怎么使用async函数 async函数语法 自动将常规函数转换成Promise返回值也是一个Promise对象 只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数 异步函数内部可以使用...对象3; } // 相当于让异步函数对象1先执行完毕之后,再执行异步函数对象2,再执行异步函数对象3 注意事项 ​ 如果await后面只写一个基本数据类型,会这个基本数据类型进行包装,包装成一个 Promise...对象 async function func() { let data1 = await 123; //1. await后面只写一个基本数据类型 会这个基本数据类型进行包装,包装成一个

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

JS 异步

})(); await后面可以跟Promise对象或者async函数执行 额外提示:立即执行函数前面有个!...就是这个原因, 5.async/awaitPromise的关系 1.执行async函数返回的是Promise对象 2.await相当于Promise的then 3.try...catch可捕获异常...data); }) 可以看到res1却是是一个Promise对象 我们把async函数返回改一下,直接返回一个Promise对象试试 async function fn1() { return...async function的函数 返回结果都是 Promise 对象(如果函数内没返回 Promise ,则自动封装一下) async+表达式 await 后面跟 Promise 对象:会阻断后续代码...chrome/73+后的版本,如果await一个常量或者async函数或者普通函数,都会把后面紧接着的代码正常添加到微任务队列。

3.4K20

JavaScript异步编程:Generator与Async

在调用一个Generator函数后,并不会立即执行其中的代码,函数返回一个Generator对象,通过调用对象的next函数,可以获得yield/return的返回值。...main()函数这个Generator,并处理其中生成的Promise,然后在then回调中将结果返回到Generator函数,以便可以执行下边的代码。...(因为你还要去解释那些类似co的库) async/await是处理Promise一个极其方便的方法,但如果使用不当的话,也会造成一些令人头疼的问题 Async函数始终返回一个Promise 一个...,在我们使用map创建这个数组时,所有的Promise代码都会执行,也就是说,所有的请求都会同时发出去,然后我们通过await Promise.all来监听所有Promise的响应。...始终返回一个Promise,使用await或者.then()来获取返回值 Generator是属于生成器,一种特殊的迭代器,用来解决异步回调问题感觉有些不务正业了。。

1K40

async语法升级踩坑小记

因为async并不会判断你后边的是不是一个数组(这个是在co中有额外的处理)而仅仅检查表达式是否为一个Promise实例。...: if (isAdmin(1)) { // 管理员的操作 } else { // 普通用户的操作 } 因为async函数的调用会返回一个Promise实例,得益于我强大的弱类型脚本语言,Promise...eslint、ts 之类的都很难解决这个问题 一些建议 何时应该用 async ,何时应该直接用 Promise 首先,async函数的执行返回值就是一个Promise,所以可以简单地理解为async...合理的减少 await 关键字 await只能在async函数中使用,await后边可以跟一个Promise实例,这个是大家都知道的。 但是同样的,有些await其实并没有存在的必要。...结合着前边提到的在async函数返回数据是一个类似Promise.resolve/Promise.reject的过程。 而await就是类似监听then的动作。

78810

JavaScript异步编程:Generator与Async

在调用一个Generator函数后,并不会立即执行其中的代码,函数返回一个Generator对象,通过调用对象的next函数,可以获得yield/return的返回值。...main()函数这个Generator,并处理其中生成的Promise,然后在then回调中将结果返回到Generator函数,以便可以执行下边的代码。...(因为你还要去解释那些类似co的库) async/await是处理Promise一个极其方便的方法,但如果使用不当的话,也会造成一些令人头疼的问题 Async函数始终返回一个Promise 一个...,在我们使用map创建这个数组时,所有的Promise代码都会执行,也就是说,所有的请求都会同时发出去,然后我们通过await Promise.all来监听所有Promise的响应。...始终返回一个Promise,使用await或者.then()来获取返回值 Generator是属于生成器,一种特殊的迭代器,用来解决异步回调问题感觉有些不务正业了。。

58510

为什么我避免使用asyncawait?

Yodonicc无论你对async/await的立场如何,我都想向你说明,根据我的经验,为什么async/await往往会使代码复杂度更高,而不是更低。...每当有try/catch时,我们现在不仅要担心函数返回什么,还要担心它抛出什么。我们不仅有分支逻辑,这增加了复杂性,而且还必须担心同时处理两种不同的范式。一个函数可以返回一个值,也可以抛出。...在我讨论这个问题之前,首先让我承认,事实上不可能用async/await创造出金字塔结构的回调地狱,所以它有这个优势。但是我从来没有写过一个超过两级的promise流,没有必要。...每次你想在你的承诺流中写一个then或catch,首先确保你返回promise,然后转到最外层的promise(如果你一直遵循这个规则,那应该只有一层)并在那里添加你的then或catch。...一旦你在一个promise的上下文中,任何返回的值都会通过它冒泡。Promise、number、字符串、函数、对象,等等。

1.8K42

async await 你真的用对了吗?

async方法内做好try catch,不要把报错抛到框架层; 2、async方法,实际返回一个promise,默认把return值作为promise的resolve内容,而报错则封装为promise...的reject; 3、async方法内那么遇到异常要终止,可以直接throw ‘xxx’/Error; 4、async方法内如果有调用下一层方法(这个方法是async方法或返回Promise),则需要加...await,等待这个promise结果;如果同时要返回该下层调用的return值,则可以省略await,改为直接return这个Promise(但不建议,还是统一await同步写法比较好理解,详见下文例子...为什么async方法一定要加await或catch? 这里,需要先看一个例子,大家看看有什么问题。...为什么async方法内不要return Promise

2.3K10

JavaScript中的asyncawait

async一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数。...await 也是一个修饰符,await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise返回的内容, 获取的是Promise函数中resolve或者reject...这个async声明的异步函数把return后面直接量通过Promise.resolve()返回Promise对象,所以如果这个最外层没有用await调用的话,是可以用原来then链的方式来调用的: async...特点——异步无等待,所以当没有await语句执行async函数,它就会立即执行,返回一个Promise对象,非阻塞,与普通的Promise对象函数一致。...3. asyncawait简单应用 上面已经说明了 async 会将其后的函数函数表达式或 Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,

1.2K10

如何更好的编写async函数

asyncPromise的关系 async函数相当于一个简写的返回Promise实例的函数,效果如下: function getNumber () { return new Promise((resolve...在async/await支持度还不是很高的时候,大家都会选择使用generator/yield结合着一些类似于co的库来实现类似的效果 async函数代码执行是同步的,结果返回是异步的 async函数总是会返回一个...但实际上,我们会直接获得返回值:1,也就是说,如果在Promise返回一个Promise,实际上程序会帮我们执行这个Promise,并在内部的Promise状态改变时触发then之类的回调。...如果忘记添加await关键字,代码层面并不会报错,但是我们接收到的返回值却是一个Promise let number = getNumber() console.log(number) // Promise...为什么在使用Generator+co时没有这个问题 在使用koa1.x的时候,我们直接写yield [].map是不会出现上述所说的串行问题的 看过co源码的小伙伴应该都明白,里边有这么两个函数(删除了其余不相关的代码

1.1K30

数组的遍历你都会用了,那Promise版本的呢

) // 对数组元素进行求平方 // > [Promise, Promise, Promise] 这时候,我们获取到的返回值其实就是一个Promise函数组成的数组了。...所以为什么上边说map函数为最友好的,因为我们知道,Promise一个函数Promise.all 会将一个Promise组成的数组依次执行,并返回一个Promise对象,该对象的结果为数组产生的结果集...Promise {: "[object Promise]3"} 这个结果返回的就会很诡异了,我们在回看上边的reduce的函数签名 对每一项元素执行的回调函数返回值将被累加到下次函数调用中...9 await会忽略非Promise值,await 0、await undefined与普通代码无异 filter filter作为一个筛选数组用的函数,同样具有遍历的功能: 函数签名同forEach,...2, 3].some(async item => item === 2) // > true 这个函数依然会返回true,但是却不是我们想要的,因为这个async返回Promise对象被认定为true

73920

数组的遍历你都会用了,那Promise版本的呢

) // 对数组元素进行求平方 // > [Promise, Promise, Promise] 这时候,我们获取到的返回值其实就是一个Promise函数组成的数组了。...所以为什么上边说map函数为最友好的,因为我们知道,Promise一个函数Promise.all 会将一个Promise组成的数组依次执行,并返回一个Promise对象,该对象的结果为数组产生的结果集...Promise {: "[object Promise]3"} 这个结果返回的就会很诡异了,我们在回看上边的reduce的函数签名 对每一项元素执行的回调函数返回值将被累加到下次函数调用中...9 await会忽略非Promise值,await 0、await undefined与普通代码无异 filter filter作为一个筛选数组用的函数,同样具有遍历的功能: 函数签名同forEach,...2, 3].some(async item => item === 2) // > true 这个函数依然会返回true,但是却不是我们想要的,因为这个async返回Promise对象被认定为true

1.3K40

如何更好的编写async函数

首先,你需要了解Promise Promise是使用async/await的基础,所以你一定要先了解Promise是做什么的 Promise是帮助解决回调地狱的一个好东西,能够让异步流程变得更清晰。...asyncPromise的关系 async函数相当于一个简写的返回Promise实例的函数,效果如下: function getNumber () { return new Promise((resolve...在async/await支持度还不是很高的时候,大家都会选择使用generator/yield结合着一些类似于co的库来实现类似的效果 async函数代码执行是同步的,结果返回是异步的 async函数总是会返回一个...但实际上,我们会直接获得返回值:1,也就是说,如果在Promise返回一个Promise,实际上程序会帮我们执行这个Promise,并在内部的Promise状态改变时触发then之类的回调。...为什么在使用Generator+co时没有这个问题 在使用koa1.x的时候,我们直接写yield [].map是不会出现上述所说的串行问题的 看过co源码的小伙伴应该都明白,里边有这么两个函数(删除了其余不相关的代码

1.2K10
领券