首页 > 其他分享 >async

async

时间:2022-10-24 15:33:05浏览次数:61  
标签:... const await Promise catch async

async

async函数是Generator函数的语法糖.将*换成await,将yield转换为await,不需要co模块那样的执行器来保证自动执行,返回值是Promise(那还用那么麻烦的东西干嘛,cao)。

const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

async函数抛出错误会导致Promise对象变成reject状态,抛出的错误对象被catch捕获,前一个return会被then回调函数收到。

  • 返回的Promise对象只有等到内部所有的await后面的Promise对象执行完,才会状态变化.
  • 对应的,使用到了thenable对象都会将它等同于Promise对象。
  • 如果await后面的Promise对象变为reject状态,整个async函数会被中断执行。
  • 如果希望在前一个await语句出错时,后面的await语句可以继续执行:
//使用try...catch
try{
    await ...
}catch(e){

}
await ...
//使用catch
async function f(){
    await Promise.reject('出错了')
    .catch(e => console.log(e));
}

实现出错时多次尝试访问的功能:

  for (i = 0; i < NUM_RETRIES; ++i) {
    try {
      await superagent.get('http://google.com/this-throws-an-error');
      break;
    } catch(err) {}
  }

发送并发请求时,为了并发执行,注意async函数内部是继发执行的,而外部循环async可以达到并发执行的效果:

//继发执行:
async function logInOrder(urls){
  const res=await fecth(url);
  return ...
}
//并发
const text=urls.map(async url=>{
  const res=await fetch(url);
  return ...
})

顶层await的使用,用于对模块进行加载操作:
export const output=someProcess((await dynamic).default,await data)

标签:...,const,await,Promise,catch,async
From: https://www.cnblogs.com/mengyiqwq/p/16821599.html

相关文章

  • c# async await 的Demo
    如下代码:在运行异步方法:DownloadDocsMainPageAsync()后,后续的代码直接可以运行。    在调用awaitdownloading()后等待运行结果。代码如下:publ......
  • 微软正式发布了Microsoft.Bcl.Async
    微软发布了Microsoft.Bcl.Async的最终版本,参看博客​​Microsoft.Bcl.AsyncisNowStable​​​。该包允许开发者在.NET4、Silverlight4和WindowsPhone7.5使用C#5和V......
  • 安卓中实现异步任务(2)——使用AsyncTask实现
    安卓中实现异步任务(2)——使用AsyncTask实现问题背景上次的文章大致介绍了几种安卓汇总实现异步任务的方法,讲得比较简要,有朋友问到具体的实现方式,现在开始分列几篇文章详细......
  • UEC++ 多线程(二) AsyncTask
    AsyncTaskAsyncTask系统实现的多线程与自己实现继承的FRunnable实现的原理相似,还可以利用UE4提供的线程池。当使用多线程不满意时也可以调用StartSynchronousTask改成主线......
  • vue中执行异步函数async和await的用法
    一、async基础用法async函数,会返回一个promise对象,可以用.then调用async函数中return的结果asyncfunctionhelloAsync(){return"返回结果";}con......
  • vue3+vite 使用defineAsyncComponent动态异步引入组件出错时的解决办法
    constname='c1'constcurrentComponent=shallowRef()constcomponents=import.meta.glob("./a/*.vue");currentComponent.value=defineAsyncComponent(compon......
  • 使用async与await的异步函数同步化
    async与await当ajax需要按顺序出场时,需要用到async与await方法了async放在函数的前面表示此函数是一个异步函数  await放在async的内部 公示当前代码应该做......
  • 如何在 JavaScript中将axios与async/await一起使用?
    Axios是一个基于promise的处理异步HTTP请求的客户端。本指南将演示如何通过async/await处理这些请求。安装和使用要使用Axios,您需要使用npmnpminstallaxios......
  • [HTML 5] Async clioboard
    https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_APIconstapp=document.getElementById('app');app.innerHTML=`<h1>JavaScriptHTML5APIs</h1>......
  • ECM5 asynchronous
    <scripttype="text/javascript">"usestrick";letregularFunction=()=>{return"Hello";}lettimeoutFunction=msg=>{varreturnMsg;setTimeout((......