Promise學習

Promise學習

閱讀廖雪峯的官方網站Promise後,自己記錄下理解。
Promise對象,其實就是承諾執行,怎麼解釋,看下面的例子。

new Promise(function (resolve, reject){
	// 這兩個參數,就是兩個函數,我們在函數內覺得什麼時候執行。
	var num = Math.random()*10
	// 當num > 5 我們1秒後執行resolve()
	// 當num < 5 我們1秒後執行reject()
	setTimeout(function(){
		if (num > 5) {
			console.log('num = '+ num + '我們執行resolve()')
			resolve()
		} else {
			console.log(('num = '+ num + '我們執行reject()'))
			reject()
		}
	},1000)
}).then(function(){
	console.log('我們是執行resolve()');
}).catch(function(){
	console.log('我們是執行reject()');
})

這就是最基本的Promise用法,我們不要被新事物迷惑,抓住根本才最重要。
當然我們也可以鏈式調用,如:p.then().then().catch()

var p1 = function (num) {
	return new Promise(function (resolve, reject) {
		console.log(num + num)
		setTimeout(resolve, 1000, num + num)
	})
}
var p2 = function (num) {
	return new Promise(function (resolve, reject) {
		console.log(num * num)
		setTimeout(resolve, 1000, num * num)
	})
}
var p = new Promise(function (resolve, reject) {
	console.log(11);
	resolve(11)
})
p.then(p1).then(p2).then(p1).then(function () {
	console.log('end')
})

這裏將一個promise函數供then調用,然後又return一個promise,然後繼續調用,最後執行then函數打印end,當然我們也可以在其中加入catch,在返回的promise函數中調用。
如果多個promise函數 同時執行的話,我們可以用Promise.all方法

var p1 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 600, 'P2');
});
// 同時執行p1和p2,並在它們都完成後執行then:
Promise.all([p1, p2]).then(function (results) {
    console.log(results); // 獲得一個Array: ['P1', 'P2']
});

還有一種,我們想兩個地址同時請求插件JS,但是我們只需要一個,這時候就可以用Promise.race方法,只會返回先返回結果的,另一個方法雖然也會執行,但是結果不在返回。

var p1 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 800, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 600, 'P2');
});
Promise.race([p1, p2]).then(function (result) {
    console.log(result); // 'P2'
});

以上就是Promise方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章