<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關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        關(guān)于Promise 異步編程的實例講解

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:31:21
        文檔

        關(guān)于Promise 異步編程的實例講解

        關(guān)于Promise 異步編程的實例講解:實例如下所示: //1.解決異步回調(diào)問題 //1.1 如何同步異步請求 //如果幾個異步操作之間并沒有前后順序之分,但需要等多個異步操作都完成后才能執(zhí)行后續(xù)的任務(wù),無法實現(xiàn)并行節(jié)約時間 const fs = require('fs'); let school = {}; fs.re
        推薦度:
        導(dǎo)讀關(guān)于Promise 異步編程的實例講解:實例如下所示: //1.解決異步回調(diào)問題 //1.1 如何同步異步請求 //如果幾個異步操作之間并沒有前后順序之分,但需要等多個異步操作都完成后才能執(zhí)行后續(xù)的任務(wù),無法實現(xiàn)并行節(jié)約時間 const fs = require('fs'); let school = {}; fs.re

        實例如下所示:

        //1.解決異步回調(diào)問題
        //1.1 如何同步異步請求
        //如果幾個異步操作之間并沒有前后順序之分,但需要等多個異步操作都完成后才能執(zhí)行后續(xù)的任務(wù),無法實現(xiàn)并行節(jié)約時間
        
        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如何解決回調(diào)地獄
        //在需要多個操作的時候,會導(dǎo)致多個回調(diào)函數(shù)嵌套,導(dǎo)致代碼不夠直觀,就是常說的回調(diào)地獄
        
        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本意是承諾,在程序中的意思就是承諾我過一段時間后會給你一個結(jié)果。 什么時候會用到過一段時間?答案是異步操作,異步是指可能比較長時間才有結(jié)果的才做,例如網(wǎng)絡(luò)請求、讀取本地文件等
        
        //3.Promise的三種狀態(tài)
        //例如媳婦說想買個包,這時候他就要"等待"我的回復(fù),我可以過兩天買,如果買了表示"成功",如果我最后拒絕表示"失敗",當(dāng)然我也有可能一直拖一輩子
        
        //Pending Promise對象實例創(chuàng)建時候的初始狀態(tài)
        //Fulfilled 可以理解為成功的狀態(tài)
        //Rejected 可以理解為失敗的狀態(tài)
        //then 方法就是用來指定Promise 對象的狀態(tài)改變時確定執(zhí)行的操作,resolve 時執(zhí)行第一個函數(shù)(onFulfilled),reject 時執(zhí)行第二個函數(shù)(onRejected)
        //4.構(gòu)造一個Promise
        //4.1 promise的方法會立刻執(zhí)行
        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 應(yīng)用狀態(tài)實現(xiàn)拋硬幣
        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.實現(xiàn)簡單的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會導(dǎo)致觸發(fā)Reject
        //可以采用then的第二個參數(shù)捕獲失敗,也可以通過catch函數(shù)進(jìn)行捕獲
        
        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實現(xiàn)并行
        //接受一個數(shù)組,數(shù)組內(nèi)都是Promise實例,返回一個Promise實例,這個Promise實例的狀態(tài)轉(zhuǎn)移取決于參數(shù)的Promise實例的狀態(tài)變化。當(dāng)參數(shù)中所有的實例都處于resolve狀態(tài)時,返回的Promise實例會變?yōu)閞esolve狀態(tài)。如果參數(shù)中任意一個實例處于reject狀態(tài),返回的Promise實例變?yōu)閞eject狀態(tài)
        
        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 方法會按照數(shù)組里面的順序?qū)⒔Y(jié)果返回
        //8.Promise.race實現(xiàn)選擇接受一個數(shù)組,數(shù)組內(nèi)都是Promise實例,返回一個Promise實例,這個Promise實例的狀態(tài)轉(zhuǎn)移取決于參數(shù)的Promise實例的狀態(tài)變化。當(dāng)參數(shù)中任何一個實例處于resolve狀態(tài)時,返回的Promise實例會變?yōu)閞esolve狀態(tài)。如果參數(shù)中任意一個實例處于reject狀態(tài),返回的Promise實例變?yōu)閞eject狀態(tài)。
        
        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狀態(tài)。
        
        Promise.resolve('成功').then(data=>{
         console.log(data);
        })
        10.Promise.reject
        //返回一個Promise實例,這個實例處于reject狀態(tài)
        
        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中返回結(jié)果
        Promise.resolve([1,2,3])
        .then(arr=>{
         return [...arr,4]
        }).then(arr=>{
         return [...arr,5]
        }).then(arr=>{
         console.log(arr);
        })
        //13.chain中返回promise
        //then中的結(jié)果是promise的resolve后的結(jié)果
        
        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
        //本質(zhì)是語法糖,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();

        以上這篇基于Promise 異步編程的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

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

        文檔

        關(guān)于Promise 異步編程的實例講解

        關(guān)于Promise 異步編程的實例講解:實例如下所示: //1.解決異步回調(diào)問題 //1.1 如何同步異步請求 //如果幾個異步操作之間并沒有前后順序之分,但需要等多個異步操作都完成后才能執(zhí)行后續(xù)的任務(wù),無法實現(xiàn)并行節(jié)約時間 const fs = require('fs'); let school = {}; fs.re
        推薦度:
        標(biāo)簽: 解析 解讀 異步
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日本一道高清不卡免费| 国产午夜亚洲精品国产| 中文字幕无码毛片免费看| 免费国产在线观看| 亚洲国产精品网站在线播放| 国产2021精品视频免费播放| 久久av无码专区亚洲av桃花岛| 日韩精品无码免费专区午夜 | 亚洲成人国产精品| 自拍偷自拍亚洲精品偷一| 在线免费观看一级毛片| 亚洲一区精彩视频| 在线观看特色大片免费视频| 亚洲综合无码一区二区三区| 亚洲视频在线观看免费| 亚洲成Av人片乱码色午夜| 日韩免费高清播放器| 亚洲国产精品无码久久一线 | 一区二区三区亚洲| 久久免费看少妇高潮V片特黄| 亚洲码国产精品高潮在线| GOGOGO高清免费看韩国| 国产亚洲精品线观看动态图| 一级做a免费视频观看网站| 亚洲日韩VA无码中文字幕 | 免费人成在线观看播放国产| 日韩在线视精品在亚洲| 又黄又爽一线毛片免费观看| 色噜噜的亚洲男人的天堂| 免费jjzz在线播放国产| 美女露100%胸无遮挡免费观看| 免费国产在线观看不卡| 一级一级一级毛片免费毛片| 久久亚洲国产成人精品无码区| 巨胸喷奶水www永久免费| 亚洲精品无码不卡在线播放HE| 国精产品一区一区三区免费视频| 亚洲阿v天堂在线| 久久久久久国产精品免费无码| 亚洲精品亚洲人成在线麻豆| 美女视频黄a视频全免费|