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);
}
);
相關文章
- MySQL基本使用MySql
- Retrofit基本使用
- RabbitMQ基本使用MQ
- Redis基本使用Redis
- Docker基本使用Docker
- 反射基本使用反射
- ViewDragHelper基本使用View
- indexedDB 基本使用Index
- TextMeshPro - 基本使用
- Jmeter基本使用JMeter
- Thymeleaf基本使用
- nvim 基本使用
- OpenCV 基本使用OpenCV
- git基本使用Git
- Vuex的基本使用Vue
- mongoose的基本使用Go
- mysqli的基本使用MySql
- mybatis的基本使用MyBatis
- nginx基本配置使用Nginx
- Linux基本使用Linux
- IndexedDB(一:基本使用)Index
- RecyclerView 的基本使用View
- Bootstrap 的基本使用boot
- Laravel Collection 基本使用Laravel
- mysqldumpslow基本使用MySql
- springMVC基本使用SpringMVC
- github的基本使用Github
- jQuery的基本使用jQuery
- GCD的基本使用GC
- iOS WKWebView 基本使用iOSWebView
- Promise的基本使用Promise
- Swift tableView基本使用SwiftView
- pymongo的基本使用Go
- pymssql的基本使用SQL
- 示波器的基本使用:
- Typora基本使用教程
- nodejs基本使用NodeJS
- prismjs 基本使用JS