網站首頁 Vue 正文
vue中異步數據獲取
1、獲取異步數據,通過async/await限制?
import { fetchList } from '@/api/article' //在created中即開始獲取 created() { ? ? this.getList() } methods:{ ?? ?async getList() { ? ? ? this.listLoading = true ? ? ?? ? ? ? //ES6寫法,與then方法鏈式調用相同,但比較簡潔直觀 ? ? ? //const的寫法,保證原數據不被更改 ? ? ? const { data } = await fetchList(this.listQuery) ? ? ?? ? ? ? //被await阻塞的代碼 ? ? ? const items = data.items ? ? ? this.list = items.map(v => { ? ? ? }) ? ? ? this.listLoading = false ? ? }, }
eg1:
?? ?changeA(){ ? ? ? return ?3 ? ? }, ? ? async getAsync(){ ? ? ? let a = 1 ? ? ? a = await this.changeA() ? ? ? console.log(a) ? //打印結果為3 ? ? }, ? ? //changeA中沒有異步操作,程序從上往下執行
eg2:
? ? async changeA(){ ? ? ?let a ?=22 ? ? ?await ?setTimeout(()=>{ ? ? ? ?console.log('異步中') ? ? ? ?a = 33 ? ? ?}) ? ? ?console.log('異步結果') ? ? ?return a ? ? }, ? ? async getAsync(){ ? ? ? let a = 1 ? ? ? await this.changeA() ? ? ? console.log(a) ? ? ? }, ? ? ?//打印結果為? ? ? ?異步結果 ? ? ?22 ? ? ? ? ? ? //a的結果 ? ? ?異步中 ? ? ?//結論await并未阻塞異步的代碼
eg3:
?? ?changeA(){ ? ? ? return new Promise((resolve)=>{ ? ? ? ? setTimeout(()=>{ ? ? ? ? ? console.log('異步') ? ? ? ? ? resolve() ? ? ? ? },2000) ? ? ? }) ? ? }, ? ? async getAsync(){ ? ? ? await this.changeA() ? ? ? console.log('同步') ?? ? ? }, ? ? //兩秒后打印結果? ? ? 異步 ? ? 同步 ? ? //結論:成功阻塞代碼
eg4:
?? ?changeA(){ ? ? ? return new Promise((resolve)=>{ ? ? ? ? setTimeout(()=>{ ? ? ? ? ? console.log('異步') ? ? ? ? ? resolve() ? ? ? ? },2000) ? ? ? }) ? ? }, ? ? async getAsync(){ ? ? ? this.changeA() ? ? ? console.log('同步') ?? ? ? }, ? ? //先打印同步,兩秒后打印異步
總結:當await后面跟的函數存在異步且返回promise的時候,才會阻塞之后的同步代碼,由上述eg可以印證
tips:
async函數也會立即返回一個promise對象
2、將一個方法的返回值
返回promise函數,可以在該方法結束后,使用鏈式結構
methods:{ ?? ? getProfile(id) { ?? ? ? ? ?let query = { ?? ? ? ? ? ?aid: id ?? ? ? ? ?}; ?? ? ? ? ?//返回一個promise對象 ?? ? ? ? ?return new Promise(async resolve => { ?? ? ? ? ? ?? ? ?const {data} = await api.getProfileList(query) ?? ? ? ? ? ?? ? ?//被await阻塞的同步代碼 ?? ? ? ? ? ? ?this.profileList = data; ?? ? ? ? ? ? ?this.graphical(this.dataX, this.dataY); ?? ? ? ? ? ? ?resolve(); ?? ? ? ? ?}); ?? ? ? ?}, ?//當得到賦值的時候,再打開彈窗 ? ? ? ? this.getProfile(aid).then(() => { ? ? ? ? ? this.dialogVisible3 = true; ? ? ? ? }); }
vue處理數據(同步,異步)問題簡單記錄
情況介紹
后端返回該地址的坐標經緯度,需要前端用百度地圖api處理成詳情地址
處理過程在遍歷中直接引入
處理完數據后返回并綁定到el-table列表
通過打印發現getLocation()方法響應過慢,導致數據渲染時該字段為空
最終解決方法:new Promise()
抽離出處理數據的方法,用異步處理方式返回
返回的之中存在空值。。。
所以。。。。。在外層調用時同樣需要異步操作
因為獲取詳情地址的方法是逐條處理的,所以在調用的外層進行了遍歷
。。。。。。。。最終解決問題
原文鏈接:https://blog.csdn.net/qq_33601443/article/details/101208740
相關推薦
- 2022-07-11 EasyExcel實現追加寫入文件
- 2022-07-24 C#導入和導出CSV文件_C#教程
- 2022-03-16 swift?cell自定義左滑手勢處理方法_Swift
- 2022-03-27 pygame實現貪吃蛇游戲_python
- 2024-03-15 docker刪除、停止所有容器或鏡像
- 2022-02-07 laravel生成二維碼/生成base64二維碼流、simple-qrcode擴展
- 2023-01-07 SafeList?in?Flutter?and?Dart小技巧_Android
- 2022-08-28 failed to configure a datasource: ‘url‘ attribute
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支