中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Promise中異步編程的示例分析

發布時間:2021-07-23 11:54:53 來源:億速云 閱讀:109 作者:小新 欄目:web開發

這篇文章主要介紹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();

以上是“Promise中異步編程的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江都市| 修水县| 大同县| 犍为县| 墨江| 邓州市| 弋阳县| 浦东新区| 江北区| 平泉县| 息烽县| 滦南县| 淮北市| 永靖县| 沁水县| 巴东县| 衡水市| 章丘市| 漳州市| 沁阳市| 成武县| 信宜市| 枣阳市| 扶绥县| 潜江市| 阳谷县| 定远县| 东光县| 富蕴县| 通江县| 绵阳市| 安徽省| 城步| 延安市| 南安市| 象山县| 卢龙县| 开封县| 柞水县| 龙岩市| 布尔津县|