ECMA Script 6_非同步程式設計之 Promise
阿新 • • 發佈:2018-12-15
Promise 物件
非同步程式設計 方案,已同步的方式表達非同步的程式碼,解決回撥地獄的問題
比傳統的解決方案——回撥函式和事件——更合理和更強大
是一個容器,裡面儲存著某個未來才會結束的事件(通常是一個非同步操作)的結果。
從語法上說,Promise 是一個物件,從它可以獲取非同步操作的訊息。
Promise 提供統一的 API,各種非同步操作都可以用同樣的方法進行處理
- 基本使用
-
const promise = new Promise(function(resolve, reject) { // ... some code if (/*
const result = 202; console.log( - Promise.resolve() 和 Promise.reject() 建立物件,狀態為 成功 和 失敗
- Promise.all([要檢測的物件陣列]); // 在所有的 promise 都觸發 resolve 回撥,才會成功。
- 成功時接收 resolve ,失敗只接收 reject。結果為陣列
- 例項
-
/**** 簡單 獨立非同步任務 ****/ const a = new Promise((resolve, reject)=>{ setTimeout(function(){ resolve("成功!"); }, 1000); }); const aa = new Promise((resolve, reject)=>{ setTimeout(function(){ resolve("成功!"); }, 2000); }); const aaa = new Promise((resolve, reject)=>{ setTimeout(function(){ resolve("成功!"); }, 3000); }); Promise.all([a, aa, aaa]).then(result=>{ console.log(result); // 接收到陣列是 每個 Promise 傳送過來的結果 }).catch(result=>{ console.log(result); }); console.log('主執行緒執行完了!'); /**** 複雜 分執行緒關聯任務 ****/ const b = new Promise((resolve, reject)=>{ setTimeout(function(){ console.log("Done1"+"First"); resolve("Done1"+"First"); }, 1000); }); b.then(result=>{ return new Promise((resolve, reject)=>{ setTimeout(function(){ console.log("Done2"+result); resolve("Done2"+result); }, 2000); }); }).catch() .then(result=>{ return new Promise((resolve, reject)=>{ setTimeout(function(){ console.log("Done3"+result); resolve("Done3"+result); }, 3000); }); }).catch() .then(result=>{ console.log("All Done!"+result); }).catch() console.log('主執行緒執行完了!');
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
33
3
3
3
3
3
3
3
3
3
33
33
3
3
3
3
3
3
3
3
3
3