Promise A+ 是前端必須要掌握的一個(gè)東西, 在ES6 中已經(jīng)原生的支持了它.
為什么要使用它?
異步 處理的方法, 正常都是寫在回調(diào)里面, 如何多個(gè) 異步的 方法 需要并行的話, 那么就需要在回調(diào)里面嵌套回調(diào), 這樣 數(shù)量 一多, 就會(huì)出現(xiàn)了 " 回調(diào) 地獄 ", 而 Promise 正是為了解決這個(gè)問題而出現(xiàn)的.
使用情景
同時(shí)發(fā)送兩個(gè)Ajax請(qǐng)求火焰,然后要在兩個(gè)請(qǐng)求都成功返回后再做一件接下來的事,想一想如果只按前面的方式在各自的調(diào)用位置去附加回調(diào),這是不是好像也有點(diǎn)難辦赘娄?
一. 如何使用?
- 新建一個(gè) promise 對(duì)象
- 調(diào)用 promise 的 then 方法, 調(diào)用執(zhí)行結(jié)束的 調(diào)用方法
// 1. 新建 promise 對(duì)象
var promise = new Promise(function (resolve, reject) {
setTimeout(function(){
resolve(100);
},2000)
})
// 2. 調(diào)用
promise.then(function fn1(val){
return val+100
}).then(function fn2(val){//這里為了便于說明給匿名函數(shù)加了個(gè)名字
alert(val);
})
二. 主流的類庫(kù)
bluebrid 有瀏覽器版的, 也有 NodeJs 版本
三.使用情景代碼
- 多個(gè)URL請(qǐng)求結(jié)束之后, 在做接下來的事
//Jquery 的使用方法 ,Jquery1.5+ 支持該功能
var promise1 = $.ajax(url1),
promise2 = $.ajax(url2);
promiseCombined = $.when(promise1, promise2);
promiseCombined.done(onDone);
未完待續(xù)...