• ES6中async与await的promise的使用方法


    ES6中async与await的使用方法

     

    promise的使用方法

    promise简介

    是异步编程的一种解决方案。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。解决回调函数嵌套过多的情况

    const promise =new Promise(function(resolve,reject){
    	setTimeout(function(){
    		resolve('执行成功')
    	},3000)
    })
    
    promise.then(res=>{
    	console.log(res)
    }).catch(err=>{
    	console.log(err)
    })
    console.log(111)
    

    等待三秒后输出 ‘执行成功’,也就是说当异步操作完成,即执行resolve或者reject之后,才会执行then中的操作

    其他用法

    promise.all([])

    所有请求都完成时再执行后续操作

    var p1 = Promise.resolve(3);
    var p2 = 1337;
    var p3 = new Promise((resolve, reject) => {
      setTimeout(resolve, 100, 'foo');
    }); 
    
    Promise.all([p1, p2, p3]).then(values => { 
      console.log(values); // [3, 1337, "foo"] 
    });
    

    promise.race([])

    那个请求先执行完成就返回那个请求结果,这个可以把一个请求与setTimeout对比,实现请求超时的效果

    var p1 = new Promise(function(resolve, reject) { 
        setTimeout(resolve, 500, "one"); 
    });
    var p2 = new Promise(function(resolve, reject) { 
        setTimeout(resolve, 100, "two"); 
    });
    
    Promise.race([p1, p2]).then(function(value) {
      console.log(value); // "two"
      // 两个都完成,但 p2 更快
    });
    

    async与await

    模拟一下经常出现的问题

    function getData(){
    	return new Promise(function(resolve,reject){
    		setTimeout(function(){  //模拟一下请求
    			resolve('执行成功')
    		},3000)
    	})
    }
    function main(){
    	let data=''
    	getData().then(res=>{
    		data=res
    	})
    	console.log(data)
    	console.log('操作完成')
    	setInterval(()=>{
    		console.log(data)
    	},1000)
    	
    }
    main()
    

    运行结果: 

    可以看到第一个console.log(data)的结果为空,这不难解释,因为main函数内容顺序执行,当getData()的时候异步操作还未完成,所以继续执行下面的操作。当第三秒的时候才执行resolve()并且成功输出data,这也对应了上面promise所说的‘执行resolve或者reject之后,才会执行then中的操作’既然这样事情就简单了,一直等待请求完成不就完事了。 这里更改main函数为

    async function main() {
            // var data = await getData()//或者
    	let data
    	 await getData().then((res)=>{
    		 data=res
    	})
    	console.log(data)
    	console.log('操作完成')
    }
    

    输出结果: 

  • 相关阅读:
    MAUI 通用权限框架(ABP)
    MAUI 入门教程系列(3.多目标平台)
    MAUI 入门教程系列(4.通用主机)
    Swagger 入门教程
    js对比两个文本的差异并高亮显示差异部分
    崩坏3模拟抽卡243亿张补给卡对比精准和扩充池
    银行业务概要相关知识总结
    R720 idRAC 会话数RAC0218:已达到用户会话的最大数,重起idRAC yi
    linux nginx 安装
    异构系统集成架构与流程图
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/12660404.html
Copyright © 2020-2023  润新知