异步Async
2021/12/1 23:06:16
本文主要是介绍异步Async,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
异步Async
-
async 的基本语法
1 let al=async () => { 2 let result=await n; 3 console.log(result); 4 }; 5 al ();
-
形式
A函数也是函数,所以具有普通函数该有的性质。不过形式上有两点不同:一是定义A函数时,function
关键字前需要有async
关键字(意为异步),表示这是个A函数。二是在A函数内部可以使用await
关键字(意为等待),表示会将其后面跟随的结果当成异步操作并等待其完成。
1 // 声明式 2 async function A() {} 3 4 // 表达式 5 let A = async function () {}; 6 7 // 作为对象属性 8 let o = { 9 A: async function () {} 10 }; 11 12 // 作为对象属性的简写式 13 let o = { 14 async A() {} 15 }; 16 17 // 箭头函数 18 let o = { 19 A: async () => {} 20 };
-
返回值
执行A函数,会固定的返回一个
Promise
对象。得到该对象后便可监设置成功或失败时的回调函数进行监听。如果函数执行顺利并结束,返回的P对象的状态会从等待转变成成功,并输出
return
命令的返回结果(没有则为undefined
)。如果函数执行途中失败,JS会认为A函数已经完成执行,返回的P对象的状态会从等待转变成失败,并输出错误信息。
1 // 成功执行案例 2 3 A1().then(res => { 4 console.log('执行成功', res); // 10 5 }); 6 7 async function A1() { 8 let n = 1 * 10; 9 return n; 10 } 11 12 // 失败执行案例 13 14 A2().catch(err => { 15 console.log('执行失败', err); // i is not defined. 16 }); 17 18 async function A2() { 19 let n = 1 * i; 20 return n; 21 }
-
await
只有在A函数内部才可以使用
await
命令,存在于A函数内部的普通函数也不行。引擎会统一将
await
后面的跟随值视为一个Promise
,对于不是Promise
对象的值会调用Promise.resolve()
进行转化。即便此值为一个Error
实例,经过转化后,引擎依然视其为一个成功的Promise
,其数据为Error
的实例。当函数执行到
await
命令时,会暂停执行并等待其后的Promise
结束。如果该P对象最终成功,则会返回成功的返回值,相当将await xxx
替换成返回值
。如果该P对象最终失败,且错误没有被捕获,引擎会直接停止执行A函数并将其返回对象的状态更改为失败,输出错误信息。最后,A函数中的
return x
表达式,相当于return await x
的简写。
1 // 成功执行案例 2 3 A1().then(res => { 4 console.log('执行成功', res); // 约两秒后输出100。 5 }); 6 7 async function A1() { 8 let n1 = await 10; 9 let n2 = await new Promise(resolve => { 10 setTimeout(() => { 11 resolve(10); 12 }, 2000); 13 }); 14 return n1 * n2; 15 } 16 17 // 失败执行案例 18 19 A2().catch(err => { 20 console.log('执行失败', err); // 约两秒后输出10。 21 }); 22 23 async function A2() { 24 let n1 = await 10; 25 let n2 = await new Promise((resolve, reject) => { 26 setTimeout(() => { 27 reject(10); 28 }, 2000); 29 }); 30 return n1 * n2; 31 }
这篇关于异步Async的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding
- 2024-06-23AI大模型企业应用实战(15)-langchain核心组件
- 2024-06-23AI大模型企业应用实战(16)-langchain核心组件
- 2024-06-23AI 大模型企业应用实战(06)-初识LangChain
- 2024-06-19EntBot.ai: AI Website Chatbot for Product Guides and Development Doc
- 2024-06-17zero-shot-learning-definition-examples-comparison
- 2024-06-06Package Easy(基于 NSIS 的打包exe安装包工具)使用方法-icode9专业技术文章分享
- 2024-06-06基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor-icode9专业技术文章分享
- 2024-05-29Elasticsearch慢查询日志配置