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 这个是看时间输出的谁执行的快就输出谁

  • 相关阅读:
    配置Express中间件
    C#字符串中特殊字符的转义
    JSON.NET 简单的使用
    ASP.NET 解决URL中文乱码的解决
    ASP.NET MVC 笔记
    VS中一些不常用的快捷键
    Visual Studio 中突出显示的引用
    Silverlight从客户端上传文件到服务器
    silverlight打开和保存文件
    sliverlight资源文件的URI调用
  • 原文地址:https://www.cnblogs.com/xmjs/p/12995263.html
Copyright © 2011-2022 走看看