You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
因为 then 中的代码是异步执行,所以当你打断点的时候,代码不会顺序执行。而使用 async 的时候,则可以像调试同步代码一样调试。
问题:给定一个 URL 数组,如何实现接口的继发和并发?
async 继发实现:
// 继发一asyncfunctionloadData(){varres1=awaitfetch(url1);varres2=awaitfetch(url2);varres3=awaitfetch(url3);return"whew all done";}// 继发二asyncfunctionloadData(urls){for(consturlofurls){constresponse=awaitfetch(url);console.log(awaitresponse.text());}}
async 并发实现:
// 并发一asyncfunctionloadData(){varres=awaitPromise.all([fetch(url1),fetch(url2),fetch(url3)]);return"whew all done";}// 并发二asyncfunctionloadData(urls){// 并发读取 urlconsttextPromises=urls.map(asyncurl=>{constresponse=awaitfetch(url);returnresponse.text();});// 按次序输出for(consttextPromiseoftextPromises){console.log(awaittextPromise);}}
ES6 系列之 Async
ES2017 标准引入了 async 函数,使得异步操作变得更加方便。在异步处理上,async 函数就是 Generator 函数的语法糖。
其实 async 函数的实现原理,就是将 Generator 函数和自动执行器,包装在一个函数里。
使用 async 会比使用 Promise 更优雅的处理异步流程。
try/catch
能捕获 fetchData() 中的一些 Promise 构造错误,但是不能捕获 JSON.parse 抛出的异常,如果要处理 JSON.parse 抛出的异常,需要添加 catch 函数重复一遍异常处理的逻辑。async/await
的出现使得try/catch
就可以捕获同步和异步的错误。因为 then 中的代码是异步执行,所以当你打断点的时候,代码不会顺序执行。而使用 async 的时候,则可以像调试同步代码一样调试。
问题:给定一个 URL 数组,如何实现接口的继发和并发?
async 继发实现:
async 并发实现:
async 错误捕获:为了简化比较复杂的捕获,我们可以给 await 后的 promise 对象添加 catch 函数:
async 会取代 Generator 吗?
Generator 本来是用作生成器,使用 Generator 处理异步请求只是一个比较 hack 的用法,在异步方面,async 可以取代 Generator,但是 async 和 Generator 两个语法本身是用来解决不同的问题的。
async 会取代 Promise 吗?
原文链接:ES6 系列之我们来聊聊 Async
The text was updated successfully, but these errors were encountered: