关于angular $q 和 promise

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,你就可以并行执行多个异步操作,并且在一个回调中处理所有的返回数据
原文地址:https://www.cnblogs.com/joesbell/p/7381734.html