12、Generator及其非同步方面的應用
基本概念:
Generator函式是ES6提供的一種非同步程式設計解決方案,語法行為與傳統函式完全不同。Generator函式有多種理解角度。語法上,首先可以把它理解成,Generator函式是一個狀態機,封裝了多個內部狀態。
執行Generator函式會返回一個遍歷器物件,也就是說,Generator函式除了狀態機,還是一個遍歷器物件生成函式。返回的遍歷器物件,可以依次遍歷Generator函式內部的每一個狀態。
形式上,Generator函式是一個普通函式,但是有兩個特徵。一是,function關鍵字與函式名之間有一個星號;二是,函式體內部使用yield表示式,定義不同的內部狀態(yield在英語裡的意思就是產出)。
一個應用例項:
傳送ajax請求獲取新聞內容
新聞內容獲取成功後再次傳送請求,獲取對應的新聞評論內容
新聞內容獲取失敗則不需要再次傳送請求。
function* sendXml() {
// url為next傳參進來的資料
let url = yield getNews('http://localhost:3000/news?newsId=2');//獲取新聞內容
yield getNews(url);//獲取對應的新聞評論內容,只有先獲取新聞的資料拼湊成url,才能向後臺請求
}
function getNews(url) {
$.get(url, function (data) {
console.log(data);
let commentsUrl = data.commentsUrl;
let url = 'http://localhost:3000' + commentsUrl;
// 當獲取新聞內容成功,傳送請求獲取對應的評論內容
// 呼叫next傳參會作為上次暫停是yield的返回值
sx.next(url);
})
}
let sx = sendXml();// 傳送請求獲取新聞內容
sx.next();
相關文章
- Generator函式非同步應用函式非同步
- 從同步原語看非阻塞同步以及Java中的應用Java
- Ajax及其應用
- 同步阻塞、同步非阻塞、多路複用的介紹
- 閉包及其應用
- js es6深入應用系列(Generator)JS
- 非同步(二):Generator深入理解非同步
- 掃描線及其應用
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- C#中介面的顯式實現與隱式實現及其相關應用案例C#
- JS非同步程式設計之GeneratorJS非同步程式設計
- 淺談webscoket原理及其應用Web
- 淺析RunLoop原理及其應用OOP
- Java 組合模式及其應用Java模式
- 閉包及其應用場景
- Sherman-Morrison公式及其應用公式
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 2.3.6 應用程式同步
- JavaScript非同步程式設計:Generator與AsyncJavaScript非同步程式設計
- 6.6 哈夫曼樹及其應用
- 堆排序原理及其應用場景排序
- 流程卡的應用及其侷限性
- 線段樹差分及其應用
- Vue底層架構及其應用Vue架構
- 【分散式】CAP理論及其應用分散式
- 細說 Java 泛型及其應用Java泛型
- 動態代理的原理及其應用
- BurpSuite在非Web應用測試中的應用UIWeb
- 資料並非都是正態分佈:三種常見的統計分佈及其應用
- 「Kafka應用」副本同步策略Kafka
- LINUX 時間操作及其同步Linux
- java同步非阻塞IOJava
- 從 generator 的角度看 Rust 非同步程式碼Rust非同步
- 從Co剖析和解釋generator的非同步原理非同步