async和await


一,基本使用
其實就是之前學過的異步函數,異步編程在函數前寫一個ansyc,就轉化為異步函數,返回的是一個promise對象,于是就可以使用await關鍵字,可以把異步函數寫成同步函數的形式,極大地提高代碼的可讀性。

原本的:

?? ??? ? ? axios.get('adata',{
?? ??? ??? ? ? params:{
?? ??? ??? ??? ? ? id:123,
?? ??? ??? ??? ? ? name:'zhangsan'
?? ??? ??? ? ? }
?? ??? ? ? }).then(function(ret){
?? ??? ??? ? ? console.log(ret)
?? ??? ? ? })

現在:

//利用ansyc和await編寫
?? ??? ??? ?async function queryData(){
?? ??? ??? ??? ?var ret=await axios.get('adata',{
?? ??? ??? ??? ??? ?params:{
?? ??? ??? ??? ??? ??? ?id:12,
?? ??? ??? ??? ??? ??? ?name:'lisi'
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?})
?? ??? ??? ??? ?//直接利用axios.get('地址'),通過await取得服務器的響應,并賦值給ret
?? ??? ??? ??? ?console.log(ret)
?? ??? ??? ??? ?//因為響應攔截器已經處理成ret.data了,所以這里會直接得到服務器響應的信息
?? ??? ??? ?}
?? ??? ??? ?queryData()

整體代碼:

?<!DOCTYPE html>
<html lang="en">
?? ?<head>
?? ??? ?<meta charset="utf-8">
?? ??? ?<title></title>
?? ?</head>
?? ?<body>
?? ??? ?<script type="text/javascript" src="js/axios.js"></script>
?? ??? ?<script type="text/javascript">
?? ??? ??? ?axios.defaults.baseURL='http://localhost:3000/'
?? ??? ??? ?
?? ??? ??? ?//axios請求攔截器
?? ??? ??? ?axios.interceptors.request.use(function(config){
?? ??? ??? ??? ?config.headers.mytoken='nihao'
?? ??? ??? ??? ?return config
?? ??? ??? ?},function(err){
?? ??? ??? ??? ?console.log(err)
?? ??? ??? ?})

?? ??? ??? ?//axios響應攔截器
?? ??? ??? ?axios.interceptors.response.use(function(res){
?? ??? ??? ??? ?//console.log(res)//這里獲取到的res就是之前認知中的res,是把服務器傳回來的數據一起包裹在一個對象res里面的。
?? ??? ??? ??? ?//而真正的服務器傳過來的數據是res.data
?? ??? ??? ??? ?//所以說,響應攔截器的作用就是攔截服務器的響應的東西,攔截之后,再將數據處理后交給客戶端
?? ??? ??? ??? ?//比如說,我們想讓客戶端直接獲取服務器傳過來的信息時。
?? ??? ??? ??? ?var data=res.data
?? ??? ??? ??? ?return data
?? ??? ??? ?},function(err){
?? ??? ??? ??? ?console.log(err)
?? ??? ??? ?})
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?//利用ansyc和await編寫
?? ??? ??? ?async function queryData(){
?? ??? ??? ??? ?var ret=await axios.get('adata',{
?? ??? ??? ??? ??? ?params:{
?? ??? ??? ??? ??? ??? ?id:12,
?? ??? ??? ??? ??? ??? ?name:'lisi'
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?})
?? ??? ??? ??? ?//直接利用axios.get('地址'),通過await取得服務器的響應,并賦值給ret
?? ??? ??? ??? ?console.log(ret)
?? ??? ??? ??? ?//因為響應攔截器已經處理成ret.data了,所以這里會直接得到服務器響應的信息
?? ??? ??? ?}
?? ??? ??? ?queryData()
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?
?? ??? ? ? // axios.get('adata',{
?? ??? ??? ? ?// ?params:{
?? ??? ??? ??? ? // ? id:123,
?? ??? ??? ??? ? // ? name:'zhangsan'
?? ??? ??? ? ?// ?}
?? ??? ? ? // }).then(function(ret){
?? ??? ??? ? ?// ?console.log(ret)
?? ??? ? ? // })
?? ??? ?</script>
?? ?</body>
</html>

-------------------------------------------------------------------------------

用try {} catch() {},配合async 和await ,await后面可以接對應的方法(該方法必須返回一個promise對象,方法必須包含async和await)

async doSave () {

? ? ? let param = this.$props.currentLog // 當前待辦數據

? ? ? let config = {

? ? ? ? 'pivCompetenceAppraiseInstanceId': this.currentMemberInfodata.pivCompetenceAppraiseInstanceId,

? ? ? ? 'pivCompetenceScoreConfirmDetailList': this.tableData3,

? ? ? ? 'pivSchemeCompetenceId': param ? param.pivSchemeCompetenceId : this.currentIndexRowData.pivSchemeCompetenceId,

? ? ? ? 'pivSchemeCompetenceTemplateId': param ? param.pivSchemeCompetenceTemplateId : this.currentIndexRowData.pivSchemeCompetenceTemplateId

? ? ? }

? ? ? try {

? ? ? ? let res = await Api.getEdit(config)

? ? ? ? this.$message.success(res.data)

? ? ? ? await this.editRow(this.currentRowdata) // 等刷新當前數據后再賦值,editRow 方法必須加上async 和await

? ? ? ? // 保留之前輸入的備注,不被清空

? ? ? ? this.pivAnonymousAccountRows.map(v1 => {

? ? ? ? ? this.tableDataRowData.map(v2 => {

? ? ? ? ? ? if (v1.id === v2.id) {

? ? ? ? ? ? ? v1.remark = v2.remark

? ? ? ? ? ? }

? ? ? ? ? })

? ? ? ? })

? ? ? } catch (err) {

? ? ? ? this.$message.error(err.message)

? ? ? }

? ? },

async editRow (row) {

? ? ? this.templateEvaluationMode = row.templateEvaluationMode

? ? ? this.currentRowdata = row

? ? ? // this.columnDesc = 0

? ? ? const me = this

? ? ? me.modelTitle = '績效考核打分-' + row.competenceName

? ? ? me.formData = row

? ? ? if (row.templateEvaluationMode === 3) {

? ? ? ? me.addModalQuality = false

? ? ? ? me.$nextTick(() => {

? ? ? ? ? me.addModalQuality = true // 素質評議模板彈框

? ? ? ? })

? ? ? } else if (row.templateEvaluationMode === 1 || row.templateEvaluationMode === 2) {

? ? ? ? me.addModal = true

? ? ? } else if (row.templateEvaluationMode === 4 || row.templateEvaluationMode === 5) {

? ? ? ? this.isShowTargetTask = true

? ? ? }

? ? ? if (row.stateName === '打分完成') {

? ? ? ? this.stateFlag = false

? ? ? ? this.commitFlag = true

? ? ? } else {

? ? ? ? this.stateFlag = true

? ? ? ? this.commitFlag = false

? ? ? }

? ? ? let config = {

? ? ? ? pivSchemeCompetenceId: row.pivSchemeCompetenceId,

? ? ? ? pivSchemeCompetenceTemplateId: row.pivSchemeCompetenceTemplateId

? ? ? }

? ? ? await Api.getDetail(config)

? ? ? ? .then((res) => {

? ? ? ? ? this.isPostShowed = res.data.isPostShowed

? ? ? ? ? if (row.templateEvaluationMode === 3) {

? ? ? ? ? ? this.headerQuality = []

? ? ? ? ? ? this.tableDataQuality = res.data.tableContents

? ? ? ? ? ? this.headerQuality = res.data.header

? ? ? ? ? ? // this.$nextTick(() => {

? ? ? ? ? ? // ? this.getQualityScore()

? ? ? ? ? ? // })

? ? ? ? ? } else if (row.templateEvaluationMode === 1 || row.templateEvaluationMode === 2) {

? ? ? ? ? ? this.pivAnonymousAccountRows = res.data.tableContents

? ? ? ? ? } else if (row.templateEvaluationMode === 4 || row.templateEvaluationMode === 5) {

? ? ? ? ? ? this.tableDataQuality = res.data.tableContents.appraiserContent

? ? ? ? ? ? this.targetState = this.tableDataQuality[0].state

? ? ? ? ? ? this.memberHeader = res.data.header.memberHeader

? ? ? ? ? ? this.memberContentData = res.data.tableContents.memberContent

? ? ? ? ? ? this.memberContent = this.memberContentData[0]

? ? ? ? ? ? if (row.templateEvaluationMode === 4) {

? ? ? ? ? ? ? this.appraiserHeader = res.data.header.appraiserHeader

? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? this.getAllScoreOne()

? ? ? ? })

? ? ? ? .catch((err) => {

? ? ? ? ? if (err.message) {

? ? ? ? ? ? this.$message.error(err.message)

? ? ? ? ? }

? ? ? ? })

? ? },

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42201.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVS-DR的RS進行ARP抑制的原因和LVS持久連接配置

一.RS的ARP抑制 1.為什么要抑制 2.如何抑制 &#xff08;1&#xff09;修改/etc/sysctl.conf文件&#xff0c;增加以下內容 &#xff08;2&#xff09;命令行臨時設置 二.LVS持久連接 1.客戶端持久連接 2.端口持久連接 3.防火墻標記持久連接 一.RS的ARP抑制 1.為什么要…

Binary operator ‘*‘ cannot be applied to two ‘Double?‘ operands

在 swift 中聲明 Double 類型參數變量在進行運算處理時拋出了如下異常 Binary operator * cannot be applied to two Double? operands 情況一 參數類型不匹配,需將參數類型進行匹配 self.max height / (length * width) // 初始 self.max height / (length * Double(wid…

Java“牽手”根據關鍵詞搜索(分類搜索)京東商品列表頁面數據獲取方法,京東API實現批量商品數據抓取示例

京東商城是一個網上購物平臺&#xff0c;售賣各類商品&#xff0c;包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取京東商品列表和商品詳情頁面數據&#xff0c;您可以通過開放平臺的接口或者直接訪問京東商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹&…

學校信息管理系統說明文檔

目錄 0學生信息管理系統體驗教程. 4 0.0Student management異地打開方法&#xff1a;. 4 1. 管理系統設計需求分析. 6 1.1 需求介紹. 6 1.2功能需求. 6 1.2.1 學生信息錄入. 6 1.2.2 學生信息查詢. 6 1.2.3 權限管理. 6 1.2.4 添加學生信息驗證. 6 2.功能介紹. 7 2.1…

快速上手PyCharm指南

PyCharm簡介 PyCharm是一種Python IDE&#xff08;Integrated Development Environment&#xff0c;集成開發環境&#xff09;&#xff0c;帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具&#xff0c;比如調試、語法高亮、項目管理、代碼跳轉、智能提示、自動…

idea如何建立web項目???

我們需要用到tomcat&#xff0c;沒有下在著小伙伴&#xff0c;可以借鑒這篇博客&#xff1a; 如何正確下載tomcat&#xff1f;&#xff1f;&#xff1f;_明天更新的博客-CSDN博客 1.建立普通的Java項目。 2.簡單編寫index.jsp文件 3.添加tomcat 4.運行服務器 5.構建Servlet 最后…

嵌入式編譯FFmpeg6.0版本并且組合x264

下載直通車:我用的是6.0版本的 1.準備編譯: 2.進入ffmpeg源碼目錄&#xff0c;修改Makefile&#xff0c;添加編譯選項&#xff1a; CFLAGS -fPIC 不加會報錯 3.使用命令直接編譯 ./configure --cross-prefix/home/xxx/bin/arm-linux-gnueabihf- --enable-cross-compile --targ…

CodeSite for .NET Crack

CodeSite for .NET Crack CodeSite for.NET與Visual Studio集成&#xff0c;通過實時查看器日志記錄系統提供對代碼執行的更深入了解&#xff0c;該系統有助于在本地或遠程執行代碼時快速查找問題。超越傳統的斷點調試&#xff0c;在應用程序繼續運行時記錄應用程序的執行&…

vue使用jsplumb 流程圖

安裝jsPlumb庫&#xff1a;在Vue項目中使用npm或yarn安裝jsPlumb庫。 npm install jsplumb 創建一個Vue組件&#xff1a;創建一個Vue組件來容納jsPlumb的功能和呈現。 <template><div style"margin: 20px"><div style"margin: 20px">&l…

docker 安裝 elasticsearch、kibana 7.4.2

切換root 用戶 su root 拉起鏡像 docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 #1、創建Elasticsearch配置文件夾 mkdir -p /mydata/elasticsearch/config ? #2、創建Elasticsearch數據文件夾 mkdir -p /mydata/elasticsearch/data #3、創建Elasticsearch插件…

Python學習筆記_基礎篇(八)_正則表達式

1. 正則表達式基礎 1.1. 簡單介紹 正則表達式并不是Python的一部分。正則表達式是用于處理字符串的強大工具&#xff0c;擁有自己獨特的語法以及一個獨立的處理引擎&#xff0c;效率上可能不如str自帶的方法&#xff0c;但功能十分強大。得益于這一點&#xff0c;在提供了正則…

Spring系列篇 -- Bean的生命周期

目錄 經典面試題目&#xff1a; 一&#xff0c;Bean的生命周期圖 二&#xff0c;關于Bean的生命周期流程介紹&#xff1a; 三&#xff0c;Bean的單例與多例模式 總結&#xff1a; 前言&#xff1a;今天小編給大家帶來的是關于Spring系列篇中的Bean的生命周期講解。在了解B…

DAY06_SpringBoot—簡介基礎配置yaml多環境開發配置整合第三方技術

目錄 一 SpringBoot簡介1. 入門案例問題導入1.1 入門案例開發步驟1.2 基于SpringBoot官網創建項目1.3 SpringBoot項目快速啟動 2. SpringBoot概述問題導入2.1 起步依賴2.2 輔助功能 二 基礎配置1. 配置文件格式問題導入1.1 修改服務器端口1.2 自動提示功能消失解決方案1.3 Spri…

國產化系統中遇到的視頻花屏、卡頓以及延遲問題的記錄與總結

目錄 1、國產化系統概述 1.1、國產化操作系統與國產化CPU 1.2、國產化服務器操作系統 1.3、當前國產化系統的主流配置 2、視頻解碼花屏與卡頓問題 2.1、視頻解碼花屏 2.2、視頻解碼卡頓 2.3、關于I幀和P幀的說明 3、國產顯卡處理速度慢導致圖像卡頓問題 3.1、視頻延…

SVG在線編輯器TOP5,這些工具你都得知道!

隨著響應式網站設計的普及,SVG這種矢量圖格式越來越受歡迎。SVG可以使圖像在任何設備上展示效果出色。那么有哪些值得推薦的SVG在線編輯器呢?本文整理了5款熱門實用的SVG在線編輯工具,它們功能強大,甚至可以替代Photoshop。這些SVG編輯器值得設計師們親自試用,相信能給大家帶來…

ardupilot開發 --- 位置控制篇

幾個疑問 如何根據GPS定位信息進行位置控制&#xff1f; 經緯度海拔高度如何轉成導航坐標系&#xff1f; 飛控中的航跡點waypoint是基于那個坐標系的點&#xff1f;導航坐標系&#xff1f; Home點&#xff1f;導航坐標系的原點&#xff1f;電機解鎖時的點&#xff1f;xyz&…

Node.js學習筆記-05

10、測試 測試包含單元測試、性能測試、安全測試和功能測試等幾個方面&#xff0c;本章將從Node實踐的角度來介紹單元測試和性能測試。 10.1 單元測試 10.1.1 單元測試的意義 開發者自測。對于開發者而言&#xff0c;不僅要編寫單元測試&#xff0c;還應當編寫可測試代碼。…

高效解決Anaconda Prompt報錯Did not find VSINSTALLDIR這類問題

文章目錄 回憶問題解決問題step1step2 回憶問題 類似于劃紅線部分然后還有很多行的報錯信息&#xff0c;最后一行肯定是紅色劃線部分 解決問題 step1 找到 D:\Anaconda\envs\pytorch\etc\conda\activate.d在這個文件夾內會有兩個文件&#xff0c;刪除 vs2017_compiler_v…

【數據結構】 鏈表簡介與單鏈表的實現

文章目錄 ArrayList的缺陷鏈表鏈表的概念及結構鏈表的分類單向或者雙向帶頭或者不帶頭循環或者非循環 單鏈表的實現創建單鏈表遍歷鏈表得到單鏈表的長度查找是否包含關鍵字頭插法尾插法任意位置插入刪除第一次出現關鍵字為key的節點刪除所有值為key的節點回收鏈表 總結 ArrayLi…

uniapp封裝接口

uniapp封裝接口 在本篇技術博文中&#xff0c;我們將深入探討 Uniapp 框架中如何封裝接口&#xff0c;以簡化開發流程并提高效率。接口封裝是一種重要的開發策略&#xff0c;它不僅可以減少代碼量&#xff0c;還能提高代碼的復用性和維護性。 通過閱讀本文&#xff0c;你將深…