<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
        主站蜘蛛池模板: 一级做a毛片免费视频| 亚洲熟妇无码AV| 337p日本欧洲亚洲大胆裸体艺术| 国产大片线上免费看| 亚洲精品偷拍视频免费观看| 亚洲AV永久无码精品一百度影院| 亚洲AV日韩AV高潮无码专区| 亚洲综合偷自成人网第页色| 自拍偷自拍亚洲精品偷一| 91在线视频免费观看| 国产精品入口麻豆免费观看| 国产精品成人无码免费| WWW亚洲色大成网络.COM| 波多野结衣一区二区免费视频| 亚洲欧洲春色校园另类小说| 免费视频成人国产精品网站| 在线a免费观看最新网站| 国产成人精品久久亚洲| 亚洲七久久之综合七久久| 蜜桃成人无码区免费视频网站| 国产成人青青热久免费精品| 男男gay做爽爽免费视频| 无码中文字幕av免费放| 亚洲真人日本在线| a级毛片视频免费观看| 亚洲欧洲校园自拍都市| 永久免费bbbbbb视频| 亚洲精品人成电影网| a级毛片免费全部播放| 亚洲精品国产啊女成拍色拍| 青青青国产在线观看免费| 亚洲国产综合专区电影在线| 美女视频黄a视频全免费网站色 | 亚洲sss综合天堂久久久| 免费无码黄动漫在线观看| 一级毛片大全免费播放| 久久亚洲春色中文字幕久久久| 久久精品无码免费不卡| www国产亚洲精品久久久| 亚洲国产成人AV在线播放 | 蜜桃精品免费久久久久影院|