作家
登录

用Async函数简化异步代码

作者: 来源: 2017-04-19 11:20:13 阅读 我要评论

not have the killing error 
  •  
  • async function x() { 
  •  
  •   var val = await doAsyncOp(); 
  •  
  •   // this one will work just fine 
  •  
  •   throw new Error("I just think an error should be here"); 
  •  
  •   return val; 
  •  
  •  
  • 当然,我们永远不会运行到 doAsyncOp 中的第二个缺点,也不会运行到 return 语句,因为在那之前抛出的缺点已经中断了函数运行。

    问题

    如不雅你刚开端应用 async 函数,须要当心嵌套函数的问题。比如,如不雅你的 async 函数中有另一个函数(平日是回调),你可能认为可以在个中应用 await ,但实际不克不及。你只能直接在 async 函数中应用 await 。

    1. async function getAllFiles(fileNames) { 
    2.  
    3.   return Promise.all
    4.  
    5.     fileNames.map(function(fileName) { 
    6.  
    7.       var file = await getFileAsync(fileName); 
    8.  
    9.       return parse(file); 
    10.  
    11.     }) 
    12.  
    13.   ); 
    14.  
    15.  

    第 4 行的 await 无效,因为它是在一个通俗函数中应用的。不过可以经由过程为回调函数添加 async 关键字来解决这个问题。

    1. async function getAllFiles(fileNames) { 
    2.  
    3.   return Promise.all
    4.  
    5.     fileNames.map(async function(fileName) { 
    6.  
    7.       var file = await getFileAsync(fileName); 
    8.  
    9.       return parse(file); 
    10.  
    11.     }) 
    12.  
    13.   ); 
    14.  
    15.  

    你看到它的时刻会认为理所当然,即便如斯,仍然须要当心┞封种情况。

    也许你还想知道等价的应用 Promise 的代码:

    接下来的问题是关于把 async 函数看作同步函数。须要记住的是,async 函数内部的的代码是同步运行的,然则它会急速返回一个 Promise,并持续运行外面的代码,比如:

    1. var a = doAsyncOp(); // one of the working ones from earlier 
    2.  
    3. console.log(a); 
    4.  
    5. a.then(function() { 
    6.  
    7.   console.log("`a` finished"); 
    8.  
    9. }); 
    10.  
    11. console.log("hello"

        推荐阅读

        一文看懂数据可视化:从编程工具到可视化表现方式

      说到可视化,就不得不说一下大年夜数据,毕竟可视化是解决大年夜数据的一种高效的手段,而如今人人都在谈论大年夜数据,大年夜数据 ≠ 稀有据 ≠ 数据量大年夜, 离谱的是,如今就连>>>详细阅读


      本文标题:用Async函数简化异步代码

      地址:http://www.17bianji.com/lsqh/34848.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)