1. 程式人生 > >關於angular $q 和 promise

關於angular $q 和 promise

構造函數 回調 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