zoukankan      html  css  js  c++  java
  • 关于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,你就可以并行执行多个异步操作,并且在一个回调中处理所有的返回数据
  • 相关阅读:
    mysql基础(三)存储引擎和锁
    为给定字符串生成MD5指纹
    区块链基本原理,Part-2:工作量证明和权益证明
    区块链基本原理,Part-1:拜占庭容错
    区块链挖矿 2.0
    以太坊 2.0 中的验证者经济模型,Part-2
    以太坊 2.0 中的验证者经济模型,Part-1
    Java归并排序之递归
    Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
    Java棋盘覆盖问题
  • 原文地址:https://www.cnblogs.com/joesbell/p/7381734.html
Copyright © 2011-2022 走看看