網(wǎng)站首頁 編程語言 正文
async函數(shù)
????async關(guān)鍵字用于修飾函數(shù),async函數(shù)的返回值為Promise對象,這個promise對象的結(jié)果,由async函數(shù)執(zhí)行的返回值決定。
????????(1)async函數(shù)的返回值為普通類型,那么對應(yīng)的Promise對象的狀態(tài)為成功。
<script>
async function main() {
return "Hello,Async!";
}
let data = main();
console.log(data)
</script>
????????(2)async函數(shù)的返回值為Promise對象,那么返回的Promise對象的狀態(tài)由這個返回值決定。
<script>
async function main() {
return new Promise((resolve, reject) => {
resolve("Hello,Async!");
});
}
let data = main();
console.log(data)
</script>
????????(3)async函數(shù)通過throw語句拋出異常,那么返回的Promise對象的狀態(tài)恒定為失敗。
<script>
async function main() {
throw "ERROR";
}
let data = main();
console.log(data)
</script>
await表達式
????await關(guān)鍵字用于修飾一個表達式,該表達式被稱為:“await表達式”。
????await表達式的右側(cè)語句一般對應(yīng)一個Promise對象,但是并不是固定的,也可以是其它類型的值。
????await表達式返回的一般都是值,而非promise對象。
????????(1)若await關(guān)鍵字右側(cè)為Promise對象,那么await表達式返回的就是Promise成功的值;
<script>
async function main() {
let promise = new Promise((resolve, reject) => {
resolve("Hello,Async!");
});
let result = await promise;
console.log(result)
return result;//返回值
// throw "ERROR";
}
let data = main();
console.log(data)
</script>
????????(2)若await關(guān)鍵字右側(cè)是其它值,那么會直接將此值作為await的返回值。
<script>
async function main() {
let promise = "Hello,Async!"
/*new Promise((resolve, reject) => {
resolve("Hello,Async!");
});*/
let result = await promise;
console.log(result)
return result;
// throw "ERROR";
}
let data = main();
console.log(data)
</script>
????????(3)此外,await表達式必須寫在async函數(shù)中,否則會報錯;如果await關(guān)鍵字右側(cè)promise對象是失敗的,那么可以使用try…catch…語句塊中進行捕獲處理。
<script>
async function main() {
let promise = new Promise((resolve, reject) => {
reject("Hello,Async!");
});
//異常捕獲
try {
let result = await promise;
return result;
} catch (err) {
console.log(err)
return undefined;
}
}
let data = main();
console.log(data)
</script>
async+await:發(fā)送Ajax請求,解析數(shù)據(jù)
????后端接口URL:http://localhost:8011/pg_demo/distract/GET/distract,返回數(shù)據(jù)內(nèi)容截圖如下,????下面,使用async和await表達式,向后端發(fā)送Ajax數(shù)據(jù)請求,獲取接口數(shù)據(jù)(其中跨域問題已經(jīng)在后端配置,可參考:《SpringBoot-跨域訪問3種配置方式》),示例代碼如下,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn">點擊按鈕</button>
</body>
<script>
function sendAjax(_url) {
return new Promise((resolve, reject) => {
//1-創(chuàng)建Ajax對象
let xhr = new XMLHttpRequest();
//2-設(shè)置請求方法+路徑
xhr.open("GET", _url);
// 3-發(fā)送請求
xhr.send();
//4-處理返回結(jié)果
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
//判斷狀態(tài)碼
if (xhr.status >= 200 && xhr.status < 300) {
//轉(zhuǎn)換promise對象狀態(tài)為成功
resolve(xhr.response);
} else {
//轉(zhuǎn)換promise對象狀態(tài)為失敗
reject(xhr.status);
}
}
}
});
}
let button = document.querySelector("#btn");
//由于await關(guān)鍵字只能用于async函數(shù)-因此點擊事件的回調(diào)函數(shù)需要使用async關(guān)鍵字進行修飾
button.addEventListener("click", async function() {
//獲取接口返回數(shù)據(jù)
let result = await sendAjax("http://localhost:8011/pg_demo/distract/GET/distract");
//解析結(jié)果
console.log(JSON.parse(result));
})
</script>
</html>
????點擊按鈕之后,控制臺打印的返回數(shù)據(jù)內(nèi)容如下,
原文鏈接:https://blog.csdn.net/weixin_43524214/article/details/125836176
相關(guān)推薦
- 2022-07-11 Python標準庫uuid模塊(生成唯一標識)詳解_python
- 2022-12-25 Qt開發(fā)之QString類的使用教程詳解_C 語言
- 2022-12-24 Docker網(wǎng)絡(luò)模型以及容器通信詳解續(xù)篇_docker
- 2022-12-03 PostgreSQL?數(shù)組類型操作使用及特點詳解_PostgreSQL
- 2023-02-15 刪除docker中沒有被使用的數(shù)據(jù)卷volume_docker
- 2022-10-01 Redis+Caffeine實現(xiàn)分布式二級緩存組件實戰(zhàn)教程_Redis
- 2022-12-24 淺析如何截獲C#程序產(chǎn)生的日志_C#教程
- 2023-03-01 Golang中Append()使用實例詳解_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支