• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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
    主站蜘蛛池模板: 好湿好大硬得深一点动态图91精品福利一区二区 | 亚洲国产精品一区二区第一页免| 国产精品看高国产精品不卡| 日韩精品在线播放| 国产在线观看一区精品| 2021国产精品成人免费视频| 在线观看亚洲精品福利片| 国产三级精品三级| 91人妻人人澡人人爽人人精品| 1024国产欧美日韩精品| 久久精品aⅴ无码中文字字幕不卡| 亚洲国产精品视频| 久久乐国产精品亚洲综合| 国产精品黄页免费高清在线观看| 麻豆精品久久精品色综合| 99re6在线视频精品免费| 国内精品久久人妻互换| 欧美成人精品高清在线观看| 一本一道精品欧美中文字幕| 久久精品亚洲欧美日韩久久| 国产精品日日摸夜夜添夜夜添1国产精品va欧美精 | 欧美精品区一级片免费播放| 国产精品福利片免费看 | 国产在线91精品入口| 国产VA免费精品高清在线| 欧美精品亚洲精品日韩| 欧美精品一本久久男人的天堂| 免费精品99久久国产综合精品| 欧美日韩精品一区二区| 99久久国产热无码精品免费久久久久 | 国产精品成人免费观看| 国产精品 羞羞答答在线| 中文字幕精品一区二区日本| 亚洲精品在线观看视频| 99久久精品国产一区二区三区 | 国产伦精品一区二区三区女 | 国产精品成人免费福利| 国产精品成人观看视频免费| 久久成人影院精品777| 92国产精品午夜福利免费| 国产微拍精品一区二区|