zoukankan      html  css  js  c++  java
  • Promise在await报错后,如何继续往下跑...

     一、resolve

    当a>0时,正常情况依次输出A、B、C

    	console.log("A");
    	let result = await this.test();
    	console.log("C:",result);
    
    	private  test(){
    		return new Promise((resolve,reject)=>{
    			console.log("B");
    			let a = 3;
    			if(a > 0){
    				resolve(a);
    			}else{
    				reject(0);
    			}
    		});
    	}
    

    二、没有处理失败信息,导致程序无法继续执行

    当a<0时。输出A、B后,C无法输出,程序无法继续往下执行。

    	console.log("A");
    	let result = await this.test();
    	console.log("C:",result);
    
    	private  test(){
    		return new Promise((resolve,reject)=>{
    			console.log("B");
    			let a = -3;
    			if(a > 0){
    				resolve(a);
    			}else{
    				reject(0);
    			}
    		});
    	}
    

    三、catch

    增加catch处理错误,程序可以继续执行

    	console.log("A");
    	let result = await this.test();
    	console.log("C:",result);
    
    	private  test(){
    		return new Promise((resolve,reject)=>{
    			console.log("B");
    			let a = -3;
    			if(a > 0){
    				resolve(a);
    			}else{
    				reject(0);
    			}
    		}).catch((err)=>{
    			console.log("err:", err);
    		});
    	}
    

    这样也可以

    let result = await this.test().catch(()=>{});
    

      

    四、使用then处理错误,程序继续执行

     换一种写法,使用then。

    	console.log("A");
    	let result = await this.test().then((res)=>{
    		console.log("success:", res);
    	},(res)=>{
    		console.log("fail:", res);
    	});
    	console.log("C:",result);
    
    
    	private  test(){
    		return new Promise((resolve,reject)=>{
    			console.log("B");
    			let a = -3;
    			if(a > 0){
    				resolve(a);
    			}else{
    				reject(0);
    			}
    		});
    	}
    

    五、在await处使用catch,程序继续执行

        protected async createGameScene() {
            console.log("A");
            let result = await this.test().catch((err)=>{console.log("err:",err)});
            console.log("C:",result);
        }
    
        private  test(){
            return new Promise((resolve,reject)=>{
                console.log("B");
                let a = -3;
                if(a > 0){
                    resolve(a);
                }else{
                    reject(0);
                }
            });
        }
    

    六、在test里catch后,程序会不执行then的reject,而是resolve。

        protected async createGameScene() {
            console.log("A");
           let result = await this.test().then((res)=>{
               console.log("C:",res);
           },(res)=>{
               console.log("D:",res)
           }).catch((err)=>{console.log("E:",err)});
        console.log("F:",result);
        }
    
        private  test(){
            return new Promise((resolve,reject)=>{
                console.log("B");
                let a = -3;
                if(a > 0){
                    resolve(a);
                }else{
                    reject(0);
                }
            }).catch((err)=>{console.log("test err:", err)});
        }
    

      

  • 相关阅读:
    第27篇-虚拟机字节码指令之操作数栈管理指令
    第26篇-虚拟机对象操作指令之putstatic
    第25篇-虚拟机对象操作指令之getfield
    第24篇-虚拟机对象操作指令之getstatic
    第23篇-虚拟机字节码指令之类型转换
    第22篇-虚拟机字节码之运算指令
    第20篇-加载与存储指令之ldc与_fast_aldc指令(2)
    第19篇-加载与存储指令(1)
    第18章-x86指令集之常用指令
    第17章-x86-64寄存器
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/9543368.html
Copyright © 2011-2022 走看看