js獲取異步函數數據的實現
目錄
- 異步函數
- 1. 回調函數
- promise
- Generator函數
- async/await函數
- 回調函數
- promise
- async await
異步函數是js中經常會用到的,它的作用無非就是進行一些異步的操作(處理數據)。那么,常見的異步函數有哪些呢,我們一般又是如何獲取異步函數的數據呢?今天這篇文章就是圍繞這個問題去寫的。
異步函數
一般正常情況下,js中的函數是一個一個地按照順序來完成的。但是異步函數可以改變執行順序。不過異步任務必須在同步任務執行結束之后,從任務隊列中依次取出執行。
常見的異步函數一共有四類:
- 回調函數
- promise函數
- Generator函數
- async/await函數
1. 回調函數
回調函數一般是作為某個函數的入參,然后在函數內部執行這個回調函數。常見的回調函數有ajax,setTimeouut定時器類,dom事件回調等。
testA(cb) { cb(); } setTimeout(() => { console.log("這是一個回調函數") }, 100)
缺點: 不能try catch捕獲錯誤, 不能直接return。
promise
promise函數是一種特殊的異步函數,里面包含三種狀態:pending、fulfilled(resolved)、rejected。pending是promise的初始狀態,resolved表示執行完成且成功的狀態,rejected表示執行完成且失敗的狀態。三個狀態不可逆轉。
Promise本身是同步,then的內容是異步:
let promiseFunc = new Promise((resolve, reject) => { // 執行同步代碼 resolve(); }).then((res) => { console.log(res) },(err) => { console.log(err); })
Generator函數
Generator 是一個可以暫停執行(分段執行)的函數,函數名前面要加星號,是一個狀態機,封裝了多個內部狀態。
function *myTest() { yield "I", yield "am", yield "queen" }
async/await函數
async修飾符加在函數前面,返回一個promise,可以使用then添加回調函數。 await后跟著一個promise或者一個原始類型的值(會自動轉成立即 resolved 的 Promise 對象),等待resolve的結果。任何一個await后的Promise發生reject,整個aysnc都會中斷,需要try{}catch(err){}來捕獲錯誤。
async function myTest() { let val = await new Promise((resolve) => { resolve(1) }); }
如何獲取異步函數的數據
獲取異步函數的數據一般分為三種:回調函數,promise和async和await
回調函數
回調函數的這種很簡單,就是直接將數據傳進回調函數里作為入參即可。
function getData(cb) { let val = "a"; cb(val); } getData((data) => { console.log(data); // "a" })
promise
使用promise來處理異步,主要就是利用resolve成功的回調函數,reject失敗的回調函數。
let promiseFunc = new Promise((resolve, reject) => { let n = Math.random(); if (n >= 0.7) { resolve(n); } else { reject(`${n}小于0.7`) } }); promiseFunc.then((data) => { console.log(data); // 0.3小于0.7 })
async await
async: 把函數變成異步函數。wait是等待異步函數執行完成。其中await一定要寫在async里面
async function myTest() { return "我是測試數據" }; async function getData() { let val = await myTest(); console.log(val); // 我是測試數據 }
到此這篇關于js獲取異步函數數據的實現的文章就介紹到這了,更多相關js獲取異步函數 內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
