# Prmise
> 英文釋義: 承諾,約定.
- Promise 對象的狀態不受外界影響(就英文意思一樣是一種承諾,不會發生改變)。Promise 對象存在三種狀態:pending(進行中)、fulfilled(已成功)和 reject(已失敗),只有異步操作的結果,可以決定是哪一種狀態,任何其他操作都無法發變這個狀態。
- 一旦狀態改變,就不會再變,任何時候都可以得到這個結果。
> 缺點: 1.無法取消 Promise,一旦新建它就會立即執行,無法中途取消
> 2.如果不設置回調函數,Promise 內部拋出的錯誤,不會反應到外部 3.當處于 pending 狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)
**用途**
用于一個異步操作的最終完成(成功或失敗)及其結果值的表示。簡單來講,就是用于處理異步操作的,異步處理成功了就執行成功的操作,異步處理失敗了就捕獲錯誤或者停止后續操作。
**注意:**
> 如果promise已到達resolve階段,拋出錯誤是無效的.
**用法**
```javascript
let num = 12;
let promise = new Promise((resolve, reject) => {
console.log('Promise');
if (num > 10) {
reject(222);
} else {
resolve();
}
});
promise
.then(res => {
console.log('resolved.');
})
.catch(err => {
throw new Error('you can use reject arguments to set this error' + err);
});
console.log('Hi!');
/*
打印結果
1.Promise promise是立即執行的,后續結果為異步執行
2.Hi! 在異步then方法前執行
3.error~ ***** 響應異步錯誤
*/
// Promise 異步加載圖片實例
function loadImageAsync(url) {
return new Promise((resolve, reject) => {
let image = new Image();
image.onload = () => {
resolve(image);
};
image.onerror = () => {
reject(new Error('Could not load image at ' + url));
};
image.src = url;
});
}
loadImageAsync('1.png').then(
value => {
console.log(value);
},
error => {
console.log('圖片加載失敗啦' + error);
}
)
//這里可以連寫then方法 參數res從 上一個.then中返回
// .then(res => {
// })
```
> promise 另外還有 **all** **race**方法,這里不在進行贅述,僅作基本使用了解,使用時再細作研究.
- 01.let-const
- 02.對象數組解構&賦值
- 03.字符串擴展,數值擴展,數組擴展
- 04.數組擴展
- 05.對象擴展
- 06.06.Symbol原始數據類型
- 07.set數據結構
- 08.map數據結構
- 09.proxy與Reflect
- 10.類
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module與模塊化
- 15.es6學習總結
- 記錄- Vue拖拽實例
- 記錄-git使用天坑之分支切換
- node -- session & cookie & localStorge
- 18.12關于前端戰略技術儲備與問題反饋
- Vue組件通信方式總結以及遇到的問題
- 01.版本回溯以及文件修改
- 02.遠端控制
- 03.分支管理
- node 入門 留言板
- nodejs模塊與 commonjs 規范
- 19年技術發展規劃
- JS錯誤處理 -> 提升程序健壯性
- Git 基本使用
- 18年年終總結