ES6--promise基本使用
什麼是promise
Promise 是非同步程式設計的一種解決方案:從語法上講,promise是一個物件,從它可以獲取非同步操作的訊息;從本意上講,它是承諾,承諾它過一段時間會給你一個結果。promise有三種狀態: pending(等待態),fulfiled(成功態),rejected(失敗態);狀態一旦改變,就不會再變。創造promise例項後,它會立即執行。
promise有什麼作用
一般來說我們會碰到的回撥巢狀都不會很多,一般就一到兩級,但是某些情況下,回撥巢狀很多時,程式碼就會非常繁瑣,會給我們的程式設計帶來很多的麻煩,這種情況俗稱——回撥地獄。
promise是用來解決兩個問題的:
- 回撥地獄,程式碼難以維護, 常常第一個的函式的輸出是第二個函式的輸入這種現象
- promise可以支援多個併發的請求,獲取併發請求中的資料
- 這個promise可以解決非同步的問題,本身不能說promise是非同步的
promise用法
Promise是一個建構函式,自己身上有all、reject、resolve這幾個眼熟的方法,原型上有then、catch等同樣很眼熟的方法。
建立一個promise
let p = new Promise((resolve, reject) => {
//做一些非同步操作
setTimeout(() => {
console.log('執行完成');
resolve('我是成功!!');
}, 2000);
});
then 鏈式操作的用法
reject的用法 :
所以,從表面上看,Promise只是能夠簡化層層回撥的寫法,而實質上,Promise的精髓是“狀態”,用維護狀態、傳遞狀態的方式來使得回撥函式能夠及時呼叫,它比傳遞callback函式要簡單、靈活的多。所以使用Promise的正確場景是這樣的:
p.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
});
catch的用法
把Promise的狀態置為rejected,這樣我們在then中就能捕捉到,然後執行“失敗”情況的回撥。看下面的程式碼。
let p = new Promise((resolve, reject) => {
//做一些非同步操作
setTimeout(function(){
var num = Math.ceil(Math.random()*10); //生成1-10的隨機數
if(num<=5){
resolve(num);
}
else{
reject('數字太大了');
}
}, 2000);
});
p.then((data) => {
console.log('resolved',data);
},(err) => {
console.log('rejected',err);
}
);
相關文章
- Retrofit基本使用
- ADB基本使用
- Linux基本使用Linux
- shape基本使用
- Jmeter基本使用JMeter
- TextMeshPro - 基本使用
- ComplateFeature基本使用
- MySQL基本使用MySql
- composer 基本使用
- Docker基本使用Docker
- Ajax基本使用
- Markdown基本使用
- Thymeleaf基本使用
- nodejs基本使用NodeJS
- git基本使用Git
- OpenCV 基本使用OpenCV
- 反射基本使用反射
- prismjs 基本使用JS
- nvim 基本使用
- Redis基本使用Redis
- QuickTestProfessional基本使用UI
- springMVC基本使用SpringMVC
- RabbitMQ基本使用MQ
- mysqldumpslow基本使用MySql
- mongoose的基本使用Go
- Vagrant 的基本使用
- Vuex的基本使用Vue
- IndexedDB(一:基本使用)Index
- GoldenGate Logdump基本使用Go
- JSCore的基本使用JS
- nginx基本配置使用Nginx
- ContentProvider的基本使用IDE
- Promise的基本使用Promise
- Android PopUpWindow基本使用Android
- APScheduler的基本使用
- selenium的基本使用
- Laravel Collection 基本使用Laravel
- drf Serializer基本使用