zoukankan      html  css  js  c++  java
  • Promise复习

    今天又有用到了promise处理逻辑的时候,一个简单的注册接口:

    router.post('/reg', (req, res) => {
        //获取数据
        let {
            us,
            ps
        } = req.body
        if (us && ps) {
            User.find({
                    us
                })
                .then((data) => {
                    console.log(data)
                    if (data.length > 0) {
                        res.send({
                            err: 0,
                            msg: '用户已存在'
                        })
                    } else {
                        //用户名不存在 可注册 把promise对象抛出去
                        return User.insertMany({
                            us,
                            ps
                        })
                    }
                })
                .then(() => {
                    res.send('注册成功')
    
                })
                .catch((err) => {
                    return res.send({
                        err: "内部错误"
                    })
                })
    
        } else {
            res.send({
                err: '用户名或密码为空'
            })
        }
    })

    需要注意:

    1.成功回调运行.then 不成功运行.catch 

    2. .then可以有多个 ,.catch只有一个,谁不成功就往里面走

    3.每次.then都要返回一个promise对象才能连成链式

    如何终止链式调用?

    手动终止:return new Error 通过抛出一个错误

    p1.then(function(data){
        console.log('p1 then resolve',data)
        return new Error('手动终止')
    })
    .then(function(data){
        console.log('p2 then resolve',data)
        return p3
    })
    .then(function(data){
        console.log('p3 then resolve',data)
    })
    

      

    Promise API

    .then(,)//不推荐用第二个,而应使用catch,可捕获其他错误 

    .catch()//捕获在此之前的错误

    .finally()//不管最后状态如何,都会执行 ,不接受任何参数,与promise状态无关

    .all() //  Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

    p的状态由p1p2p3决定,分成两种情况。

    (1)只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。

    (2)只要p1p2p3之中有一个被rejectedp的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

    .race  / /Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

    .allSettled  //Promise.allSettled()方法接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例

    .any() //Promise.any()方法接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例。

    .resolve() //有时需要将现有对象转为 Promise 对象,Promise.resolve()方法就起到这个作用。

    .rejected //Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected

    .all和.race区别: 

    Promise.all 不管你的时间只是按照你写的先后顺序来输出的
    Promise.race 这个是看时间输出的谁执行的快就输出谁

  • 相关阅读:
    在Ubuntu中通过update-alternatives切换软件版本
    SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
    mongodb 的使用
    利用grub从ubuntu找回windows启动项
    How to Repair GRUB2 When Ubuntu Won’t Boot
    Redis vs Mongo vs mysql
    java script 的工具
    python 的弹框
    how to use greendao in android studio
    python yield的终极解释
  • 原文地址:https://www.cnblogs.com/xmjs/p/12995263.html
Copyright © 2011-2022 走看看