<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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        實例講解關于Promis異步編程

        來源:懂視網 責編:小OO 時間:2020-11-27 20:13:43
        文檔

        實例講解關于Promis異步編程

        實例如下所示。當參數中所有的實例都處于resolve狀態時,返回的Promise實例會變為resolve狀態。當參數中任何一個實例處于resolve狀態時,返回的Promise實例會變為resolve狀態。如果參數中任意一個實例處于reject狀態,返回的Promise實例變為reject狀態
        推薦度:
        導讀實例如下所示。當參數中所有的實例都處于resolve狀態時,返回的Promise實例會變為resolve狀態。當參數中任何一個實例處于resolve狀態時,返回的Promise實例會變為resolve狀態。如果參數中任意一個實例處于reject狀態,返回的Promise實例變為reject狀態

        下面小編就為大家帶來一篇關于Promise 異步編程的實例講解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

        實例如下所示:

        //1.解決異步回調問題
        //1.1 如何同步異步請求
        //如果幾個異步操作之間并沒有前后順序之分,但需要等多個異步操作都完成后才能執行后續的任務,無法實現并行節約時間
        
        const fs = require('fs');
        let school = {};
        fs.readFile('./name.txt','utf8',function (err,data) {
         school.name = data;
        });
        fs.readFile('./age.txt','utf8',function (err,data) {
         school.age = data;
        });
        console.log(school);
        //1.2如何解決回調地獄
        //在需要多個操作的時候,會導致多個回調函數嵌套,導致代碼不夠直觀,就是常說的回調地獄
        
        const fs = require('fs');
        fs.readFile('./content.txt','utf8',function (err,data) {
         if(err)console.log(err);
         fs.readFile(data,'utf8',function (err,data) {
         if(err)console.log(err);
         console.log(data);
         })
        });
        //2.Promise
        //Promise本意是承諾,在程序中的意思就是承諾我過一段時間后會給你一個結果。 什么時候會用到過一段時間?答案是異步操作,異步是指可能比較長時間才有結果的才做,例如網絡請求、讀取本地文件等
        
        //3.Promise的三種狀態
        //例如媳婦說想買個包,這時候他就要"等待"我的回復,我可以過兩天買,如果買了表示"成功",如果我最后拒絕表示"失敗",當然我也有可能一直拖一輩子
        
        //Pending Promise對象實例創建時候的初始狀態
        //Fulfilled 可以理解為成功的狀態
        //Rejected 可以理解為失敗的狀態
        //then 方法就是用來指定Promise 對象的狀態改變時確定執行的操作,resolve 時執行第一個函數(onFulfilled),reject 時執行第二個函數(onRejected)
        //4.構造一個Promise
        //4.1 promise的方法會立刻執行
        let promise = new Promise(()=>{
         console.log('hello');
        });
        console.log('world');
        //4.2 promise也可以代表一個未來的值
        const fs = require('fs');
        let promise = new Promise((resolve,reject)=>{
         fs.readFile('./content.txt','utf8',function (err,data) {
         if(err)console.log(err);
         resolve(data);
         })
        });
        promise.then(data =>{
         console.log(data);
        });
        //4.3 代表一個用于不會返回的值
        const fs = require('fs');
        let promise = new Promise((resolve,reject)=>{});
        promise.then(data =>{
         console.log(data);
        });
        //4.4 應用狀態實現拋硬幣
        function flip_coin() {
         return new Promise((resolve,reject)=>{
         setTimeout(function () {
         var random = Math.random();
         if(random > 0.5){
         resolve('正');
         }else{
         resolve('反');
         }
         },2000)
         })
        }
        flip_coin().then(data=>{
         console.log(data);
        },data=>{
         console.log(data);
        });
        //5.實現簡單的Promise
        function Promise(fn) {
         fn((data)=>{
         this.resolve(data)
        
         },(data)=>{
         this.reject(data);
         })
        }
        Promise.prototype.resolve = function (data) {
         this._success(data)
        };
        Promise.prototype.reject = function (data) {
         this._error(data);
        };
        Promise.prototype.then = function (success,error) {
         this._success = success;
         this._error = error;
        };
        //6.Error會導致觸發Reject
        //可以采用then的第二個參數捕獲失敗,也可以通過catch函數進行捕獲
        
        function flip_coin() {
         return new Promise((resolve,reject)=>{
         throw Error('沒有硬幣')
         })
        }
        flip_coin().then(data=>{
         console.log(data);
        }).catch((e)=>{
         console.log(e);
        })
        //7.Promise.all實現并行
        //接受一個數組,數組內都是Promise實例,返回一個Promise實例,這個Promise實例的狀態轉移取決于參數的Promise實例的狀態變化。當參數中所有的實例都處于resolve狀態時,返回的Promise實例會變為resolve狀態。如果參數中任意一個實例處于reject狀態,返回的Promise實例變為reject狀態
        
        const fs = require('fs');
        let p1 = new Promise((resolve,reject)=>{
         fs.readFile('./name.txt','utf8',function (err,data) {
         resolve(data);
         });
        })
        let p2 = new Promise((resolve,reject)=>{
         fs.redFile('./age.txt','utf8',function (err,data) {
         resolve(data);
         });
        })
        Promise.all([p1,p2]).then(([res1,res2])=>{
         console.log(res1);
        })
        //不管兩個promise誰先完成,Promise.all 方法會按照數組里面的順序將結果返回
        //8.Promise.race實現選擇接受一個數組,數組內都是Promise實例,返回一個Promise實例,這個Promise實例的狀態轉移取決于參數的Promise實例的狀態變化。當參數中任何一個實例處于resolve狀態時,返回的Promise實例會變為resolve狀態。如果參數中任意一個實例處于reject狀態,返回的Promise實例變為reject狀態。
        
        const fs = require('fs');
        let p1 = new Promise((resolve,reject)=>{
         fs.readFile('./name.txt','utf8',function (err,data) {
         resolve(data);
         });
        })
        let p2 = new Promise((resolve,reject)=>{
         fs.readFile('./age.txt','utf8',function (err,data) {
         resolve(data);
         });
        })
        Promise.race([p1,p2]).then(([res1,res2])=>{
         console.log(res1,res2);
        })
        9.Promise.resolve
        //返回一個Promise實例,這個實例處于resolve狀態。
        
        Promise.resolve('成功').then(data=>{
         console.log(data);
        })
        10.Promise.reject
        //返回一個Promise實例,這個實例處于reject狀態
        
        Promise.reject('失敗').then(data=>{
         console.log(data);
        },re=>{
         console.log(re);
        })
        //11.封裝ajax
        function ajax({url=new Error('url必須提供'),method='GET',async=true,dataType='json'}){
         return new Promise(function(resolve,reject){
         var xhr = new XMLHttpRequest();
         xhr.open(method,url,async);
         xhr.responseType = dataType;
         xhr.onreadystatechange = function(){
         if(xhr.readyState == 4){
         if(/^2\d{2}/.test(xhr.status)){
         resolve(xhr.response);
         }else{
         reject(xhr.response);
         }
         }
         }
         xhr.send();
         });
        }
        //12.chain中返回結果
        Promise.resolve([1,2,3])
        .then(arr=>{
         return [...arr,4]
        }).then(arr=>{
         return [...arr,5]
        }).then(arr=>{
         console.log(arr);
        })
        //13.chain中返回promise
        //then中的結果是promise的resolve后的結果
        
        Promise.resolve('user').then(data=>{
         return new Promise(function (resolve,reject) {
         fetch('/'+data).then(res=>res.json().then((json)=>{
         resolve(json)
         }))
         })
        }).then(data=>{
         console.log(data);
        });
        //改寫的更簡單些
        
        Promise.resolve('user').then(data=>{
         return fetch('/'+data)
        }).then(res=>{
         return res.json();
        }).then(data=>{
         console.log(data);
        })
        //14.async/await
        //本質是語法糖,await與async要連用,await后只能跟promise
        
        async function getHello() {
         return new Promise((resolve,reject) => {
         setTimeout(function () {
         resolve('hello');
         },2000);
         })
        }
        async function getData () {
         var result = await getHello();
         console.log(result);
        } ;
        getData();

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

        文檔

        實例講解關于Promis異步編程

        實例如下所示。當參數中所有的實例都處于resolve狀態時,返回的Promise實例會變為resolve狀態。當參數中任何一個實例處于resolve狀態時,返回的Promise實例會變為resolve狀態。如果參數中任意一個實例處于reject狀態,返回的Promise實例變為reject狀態
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: caoporm碰最新免费公开视频| 亚洲sss综合天堂久久久| WWW国产亚洲精品久久麻豆| 久久久高清免费视频 | 亚洲va在线va天堂成人| 国产91色综合久久免费| 亚洲性69影院在线观看| 1000部羞羞禁止免费观看视频| 亚洲国产精品人久久| 88av免费观看入口在线| 亚洲一区中文字幕在线观看| 国产麻豆视频免费观看| 一级做a爱过程免费视| 亚洲日韩国产精品乱| 中文日本免费高清| 亚洲av色影在线| 国产成人精品久久免费动漫| 中文字幕无码精品亚洲资源网久久| 免费av欧美国产在钱| 美女视频黄频a免费大全视频| 久久久久亚洲精品天堂久久久久久| 中文在线日本免费永久18近| 亚洲日本va午夜中文字幕一区| 8x成人永久免费视频| 在线观看亚洲AV每日更新无码| 啊灬啊灬别停啊灬用力啊免费看| 国产vA免费精品高清在线观看| 亚洲午夜久久影院| 成人免费午夜视频| 一级A毛片免费观看久久精品 | 美女内射无套日韩免费播放| 亚洲人成777在线播放| avtt亚洲天堂| 久久免费公开视频| 亚洲人成电影网站免费| 最新精品亚洲成a人在线观看| 亚洲最大免费视频网| 九九久久精品国产免费看小说| 在线免费观看亚洲| 国产精品偷伦视频观看免费| 亚洲a∨无码男人的天堂|