zoukankan      html  css  js  c++  java
  • promise

    function asyncFun(a,b,cb) {
        setTimeout(function(){
            cb(a+b)
        },200)
    }
    
    asyncFun(1,2,function(result){
        console.log(result)
    })
    
    console.log(2)
    // 先返回2再返回3
    // promise 产生的原因
    function asyncFun(a,b,cb) {
        setTimeout(function(){
            cb(a+b)
        },200)
    }
    
    asyncFun(1,2,function(result){
        if (result>2) {
            asyncFun(result,2,function(result){
                if (result>4) {
                    asyncFun(result,2,function(result){
                        if (result>4) {
                            console.log('ok')
                        }
                    })
                }
            })
        }
    })
    
    console.log(2)//2之后才是ok
    function asyncFun(a,b) {
        return new Promise(function(resolve,reject){
    
            if (typeof a!=='number'||typeof b!=='number') {
                reject(new Error('no number'))
            }
    
            setTimeout(function(){
                resolve(a+b)
            },200)
        })
    }
    
    asyncFun(1,'a')
        .then(function(result){
            if (result>2) {
                return asyncFun(result,2)
            }
    }).then(function(result){
        if (result>4) {
            console.log('ok')
        }
    }).catch(function(error){
        console.log('second'+error)
    })//secondError: no number
    class User{
        constructor(name,password){
            this.name = name;
            this.password = password
        }
    
        validateName(){
            let name = this.name
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if (name === 'Leo') {
                        resolve('success')
                    }else{
                        reject('error')
                    }                
                })
    
            })
        }
        validatePwd(){
            let password = this.password
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if (password === '123') {
                        resolve('success')
                    }else{
                        reject('error')
                    }                
                })
    
            })
        }
    }
    const user = new User('Leo','123');
    user.validateName().then(function(result){
        return user.validatePwd()
    }).then(function(result){
        console.log('登录成功')
    }).catch(function(err){
        console.log("err")
    })
    // 登录成功
    class User{
        constructor(name,password){
            this.name = name;
            this.password = password
        }
    
        validateName(){
            let name = this.name
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if (name === 'Leo') {
                        resolve('success')
                    }else{
                        reject('error')
                    }                
                })
    
            })
        }
        validatePwd(){
            let password = this.password
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if (password === '123') {
                        resolve('success')
                    }else{
                        reject('error')
                    }                
                })
    
            })
        }
    }
    const user = new User('Leo','123');
    user.validateName().then(function(result){
        return 'Ok'
    })
    // 如果不是promise的话会自己封装成下面这种promise方法
    // Promise.resolve('ok')
    // var promise = new Promise(function(resolve,reject){
    //     resolve('ok')
    // })
        .then(function(result){
            console.log(result)
        })
    // OK
    class User{
        constructor(name,password){
            this.name = name;
            this.password = password
        }
    
        validateName(){
            let name = this.name
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if (name === 'Leo') {
                        resolve('success')
                    }else{
                        reject('error')
                    }                
                })
    
            })
        }
        validatePwd(){
            let password = this.password
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if (password === '123') {
                        resolve('success')
                    }else{
                        reject('error')
                    }                
                })
    
            })
        }
    }
    // const user = new User('Leo1','123');
    // user.validateName().then(function(result){
    //     throw new Error('firsterr')
    //     return user.validatePwd()
    // },function(err){
    //     console.log('seconderr')//这是出现错误所调用的
    // }).catch(function(err){
    //     console.log(err)
    // })
    // // seconderr
    
    // const user = new User('Leo','123');
    // user.validateName().then(function(result){
    //     throw new Error('firsterr')
    //     return user.validatePwd()
    // },function(err){
    //     console.log('seconderr')//这是出现错误所调用的
    // }).catch(function(err){
    //     console.log(err)
    // })
    // firsterr
    
    // const user = new User('Leo','1234');
    // user.validateName().then(function(result){
    //     throw new Error('firsterr')
    //     return user.validatePwd()
    // },function(err){
    //     console.log('seconderr')//这是出现错误所调用的
    // }).catch(function(err){
    //     console.log(err)
    //     return user.validatePwd()
    // }).then(function(result){
    //     console.log(result)
    // })
    // 密码正确的话就显示firsterr  不正确的话显示  firsterr  error
    
    
    const user = new User('Leo','1234');
    user.validateName().then(function(result){
        throw new Error('firsterr')
        return user.validatePwd()
    },function(err){
        console.log('seconderr')//这是出现错误所调用的
    }).catch(function(err){
        console.log(err)
        return user.validatePwd()
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        
    })
    function asyncFun(a,b) {
        return new Promise(function(resolve,reject){
    
            if (typeof a!=='number'||typeof b!=='number') {
                reject(new Error('no number'))
            }
    
            setTimeout(function(){
                resolve(a+b)
            },200)
        })
    }
    // 只要一个有错误就不会执行promise
    // var promise = Promise.all([asyncFun(1,2),asyncFun(3,4),asyncFun(5,6)]);
    // promise.then(function(result){
    //     console.log(result)//[ 3, 7, 11 ]
    // })
    
    // var promise = Promise.race([asyncFun(1,2),asyncFun(3,4),asyncFun(5,6)]);
    // promise.then(function(result){
    //     console.log(result)//[ 3 ]
    // })
    
    // var promise = Promise.race([asyncFun(1,'2'),asyncFun(3,4),asyncFun(5,6)]);
    // promise.then(function(result){
    //     console.log(result)//[ 3 ]
    // })
    // no number
  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/mr-pz/p/6056781.html
Copyright © 2011-2022 走看看