国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網(wǎng) 責編:小采 時間: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
推薦度:
導讀關(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)地獄
//在需要多個操作的時候,會導致多個回調(diào)函數(shù)嵌套,導致代碼不夠直觀,就是常說的回調(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)
//例如媳婦說想買個包,這時候他就要"等待"我的回復,我可以過兩天買,如果買了表示"成功",如果我最后拒絕表示"失敗",當然我也有可能一直拖一輩子

//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 應用狀態(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會導致觸發(fā)Reject
//可以采用then的第二個參數(shù)捕獲失敗,也可以通過catch函數(shù)進行捕獲

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)變化。當參數(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)變化。當參數(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
推薦度:
標簽: 解析 解讀 異步
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 另类区| 人善交xxx| 亚洲欧美日韩精品专区卡通 | 国产91久久久久久久免费 | 欧美色亚洲 | 香蕉乱码成人久久天堂爱免费 | 国产午夜久久影院 | 在线免费观看国产视频 | 久久国产精品成人免费古装 | 亚洲欧洲免费 | 日本一区二区三区免费观看 | 在线中文字幕第一页 | 亚洲 另类 在线 欧美 制服 | xxxx性xx另类 | 中文字幕有码在线观看 | 尤物视频黄 | 欧美高清一区二区三区欧美 | 综合毛片 | 精品欧美一区二区在线观看欧美熟 | 亚州一区二区 | 永久在线观看 | 久久国产成人精品 | 欧美中出在线 | 精品国产欧美一区二区三区成人 | 成人久久久 | 国产日韩欧美亚洲综合在线 | 永久毛片 | 国产视频一区二区 | 日韩欧美伊人久久大香线蕉 | 国产成人精品一区二区视频 | 国产一区二区不卡 | 精品日韩欧美一区二区三区 | 国内精品久久久久久久aa护士 | 国产特级全黄一级毛片不卡 | 亚洲欧美日本综合 | 国产日韩精品欧美一区视频 | a级精品国产片在线观看 | 国产一区二区三区高清 | 国产成人综合久久精品亚洲 | 国产视频高清 | 天堂亚洲欧美日韩一区二区 |