關於angular $q 和 promise
阿新 • • 發佈:2017-08-17
構造函數 回調 call cal lba nbsp clas back 作用
ES6中的promise
白話: 處理異步回調的一個構造函數, 解決了以前的不停的嵌套callback的方式
1:
function run1() { var p= new Promise(function (resolve,reject) { setTimeout(function () { console.log("no1"); // 異步操作成功後的處理函數 resolve("promise1"); // 異步操作失敗後的處理函數 reject("error1") },2000) }); return p } run1().then(function (data) { console.log(data); }).
結果:no1 prosemise1
2: 鏈式操作的不停回調。
function run1() { var p= new Promise(function (resolve,reject) { setTimeout(function () { console.log("no1"); // 異步操作成功後的處理函數 resolve("promise1");// 異步操作失敗後的處理函數 reject("error1") },2000) }); return p } function run2() { var p= new Promise(function (resolve,reject) { setTimeout(function () { console.log("no2"); resolve("promise2") },2000) }); return p } function run3() {var p= new Promise(function (resolve,reject) { setTimeout(function () { console.log("no3"); resolve("promise3") },2000) }); return p } run1().then(function (data) { console.log(data); return run2(); }).then(function (data) { console.log(data) return run3(); }).then(function (data) { console.log(data) });
結果:
no1
promise1
no2
promise2
no3
promise3
3: resolve reject
run1().then(function (data) { // 指定promise異步處理成功後的函數 console.log(data) }).catch(function (data) { // 指定promise異步處理失敗後的函數 console.log(data) });
我們知道Promise對象除了then方法,還有一個catch方法,它是做什麽用的呢?其實它和then的第二個參數一樣,用來指定reject的回調
還有一個作用就是
執行resolve的回調(也就是上面then中的第一個參數)時,如果拋出異常了(代碼出錯了),那麽並不會報錯卡死js,而是會進到這個catch方法中。
4: promise.all()
// Promise的all方法提供了並行執行異步操作的能力,並且在所有異步操作執行完後才執行回調。 Promise.all([run1(),run2(),run3()]).then(function (result) { console.log(result); }); // 有了all,你就可以並行執行多個異步操作,並且在一個回調中處理所有的返回數據
關於angular $q 和 promise