<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JS異步執行結果獲取的3種解決方式

        來源:懂視網 責編:小采 時間:2020-11-27 22:00:50
        文檔

        JS異步執行結果獲取的3種解決方式

        JS異步執行結果獲取的3種解決方式:前言 JS異步執行機制具有非常重要的地位,尤其體現在回調函數和事件等方面。 但異步有時候很方便,有時候卻很讓人惱火,下面來總結一下異步執行結果獲取的方法 回調 這是最傳統的方法了,也是最簡單的,如下代碼 function foo(cb) { setTimeou
        推薦度:
        導讀JS異步執行結果獲取的3種解決方式:前言 JS異步執行機制具有非常重要的地位,尤其體現在回調函數和事件等方面。 但異步有時候很方便,有時候卻很讓人惱火,下面來總結一下異步執行結果獲取的方法 回調 這是最傳統的方法了,也是最簡單的,如下代碼 function foo(cb) { setTimeou

        前言

        JS異步執行機制具有非常重要的地位,尤其體現在回調函數和事件等方面。

        但異步有時候很方便,有時候卻很讓人惱火,下面來總結一下異步執行結果獲取的方法

        回調

        這是最傳統的方法了,也是最簡單的,如下代碼

        function foo(cb) {
         setTimeout(function() {
         cb(1); // 通過參數把結果返回
         }, 2000);
        }
        
        foo(function(result) { // 調用foo方法的時候,通過回調把方法返回的數據取出來
         console.log(result);
        })

        Promise

        Promise是ES6里加入的新對象,它可以把一個異步執行的方法封裝成支持同步操作的方法,結合 async/await 完美,下面說一下它是怎么封裝一個方法的

        function foo() {
         return new Promise((resolve, reject) => {
         setTimeout(function() {
         resolve(1); // 通過 resolve 參數把成功的結果返回
         // reject('error'); // 通過 reject 參數把錯誤信息返回
         }, 2000);
         })
        }
        
        // 調用
        foo()
         .then(result => console.log(result))
         .catch(error => console.log(error));

        從上面例子可以看出,Promise取值使用的是 .then() 函數,異常處理用的是 .catch() 函數

        rxjs

        rxjs 是一種設計思想的javascript語言的實現框架,rx原名是:ReactiveX

        官網是 http://reactivex.io/

        開源地址 https://github.com/ReactiveX/rxjs

        rx口號是萬物皆是流,跟java里萬物皆對象挺像的,它的api也全都是對流進行操作,寫起來還是很爽的,下面看一下rxjs怎么封裝一個異步執行操作

        注意,用這貨首先要安裝它在自己的項目里,然后再引入依賴,如果是瀏覽器環境可以引入js

        import { Observable } from 'rxjs';
        
        function foo() {
         return new Observable((observe) => {
         setTimeout(function() {
         observe.next(1); // 通過 observe.next() 方法把成功的結果返回
         // observe.error('error'); // 通過 observe.error 方法把錯誤信息返回
         }, 2000);
         })
        }
        
        // 調用
        foo()
         .subscribe(
         result => console.log(result),
         error => console.log(error)
         );

        可以看到它跟Promise很像,就是變了幾個參數名,不過它可比Promise強大多了

        下面來說一下rxjs里的取消操作,沒錯請求還能取消,這騷操作也只有rxjs能實現了

        import { Observable } from 'rxjs';
        
        function foo() {
         return new Observable((observe) => {
         setTimeout(function() {
         observe.next(1); // 通過 observe.next() 方法把成功的結果返回
         // observe.error('error'); // 通過 observe.error 方法把錯誤信息返回
         }, 2000);
         })
        }
        
        // 調用,方法里2s后返回數據
        const o = foo().subscribe(
         result => console.log(result),
         error => console.log(error)
        );
        
        // 設置一個定時器1s后取消訂閱,這樣console里就不會打印出結果了,這個請求也就被取消了
        setTimeout(function() {
         o.unsubscribe(); // 取消訂閱
        }, 1000);

        rxjs除了取消執行外,還有一個牛逼的功能,循環執行,對一個請求可以一直接收它返回的結果,看下下面的例子就明白了

        import { Observable } from 'rxjs';
        
        function foo() {
         return new Observable((observe) => {
         let count = 0;
         setInterval(function() {
         observe.next(count++); // 通過 observe.next() 方法把成功的結果返回
         // observe.error('error'); // 通過 observe.error 方法把錯誤信息返回
         }, 1000);
         })
        }
        
        // 調用
        foo().subscribe(
         result => console.log(result), // 這行會每隔1s打印一條數據
         error => console.log(error)
        );

        因為在 ReactiveX 里一切皆是流,所以也就有很多對流操作的api,比如 fliter, map 等,類似于java8里的 stream 的操作,下面看一下例子說明白了

        import { Observable } from 'rxjs';
        // 對流操作要引入操作類
        import { map, filter } from 'rxjs/operators';
        
        function foo() {
         return new Observable((observe) => {
         let count = 0;
         setInterval(function() {
         observe.next(count++); // 通過 observe.next() 方法把成功的結果返回
         // observe.error('error'); // 通過 observe.error 方法把錯誤信息返回
         }, 1000);
         })
        }
        
        // 調用
        const o = foo();
        o.pipe(
         filter((value: number) => value % 2 === 0),
         map((value: number) => value *= 2)
        ).subscribe(data => console.log(data));

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JS異步執行結果獲取的3種解決方式

        JS異步執行結果獲取的3種解決方式:前言 JS異步執行機制具有非常重要的地位,尤其體現在回調函數和事件等方面。 但異步有時候很方便,有時候卻很讓人惱火,下面來總結一下異步執行結果獲取的方法 回調 這是最傳統的方法了,也是最簡單的,如下代碼 function foo(cb) { setTimeou
        推薦度:
        標簽: js 執行 執行的
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99久9在线|免费| 成av免费大片黄在线观看| 精品国产无限资源免费观看| 精品久久久久久亚洲| 成人免费777777被爆出| 亚洲日韩中文字幕在线播放| 青青青国产手机频在线免费观看| 国产成人精品日本亚洲| 免费精品无码AV片在线观看| 中文字幕亚洲色图| 91精品免费在线观看| 色天使亚洲综合在线观看| 又黄又爽的视频免费看| 韩国免费a级作爱片无码| 亚洲av无码一区二区三区不卡| 未满十八18禁止免费无码网站| 亚洲女人初试黑人巨高清| www.黄色免费网站| 久久精品国产亚洲AV天海翼| 亚洲国产综合无码一区二区二三区 | 亚洲狠狠婷婷综合久久| 免费观看的av毛片的网站| 新最免费影视大全在线播放| 亚洲Av无码专区国产乱码DVD| 日本亚洲免费无线码| 久久精品国产亚洲AV电影网| 亚洲自偷自偷图片| 四虎最新永久免费视频| 国产亚洲美女精品久久久久| 久久亚洲AV无码精品色午夜麻| 国产h视频在线观看网站免费| 亚洲AV无码国产剧情| 久久久久久久综合日本亚洲| 一二三四视频在线观看中文版免费 | 精品国产免费人成网站| 亚洲国产成+人+综合| 亚洲国产专区一区| 黄色成人网站免费无码av| 国产在线精品一区免费香蕉 | 免费一级全黄少妇性色生活片| 亚洲av无码精品网站|