zoukankan      html  css  js  c++  java
  • 解决异步的几种实现方式

    如下代码

    const request = function(){
    	let num = Math.round(Math.random()*100)/100;
    	console.log(num);
        setTimeout(function(){
        	if(num < 0.5){
        		return('1234567');
        	}else{
        		return('abcdefg');
        	}
    	},500)
    }
    console.log(request())
    //输出:0.31
    //      undefined
    

    setTimeout为异步函数,所以第二个返回值就打印为了undefined,因为不会等待计时器函数执行完成再执行外层的console.log(request())。

    1、promise then

    //解决方法一:promise then
    const request = function(){
    	var _this = this;
    	let num = Math.round(Math.random()*100)/100;
    	console.log( num );
    	return new Promise( (resolve, reject) => {
    		setTimeout(function(){
    			num < 0.5 ? resolve('1234567') : reject('abcdefg');
    		}, 500);
    	});
    }
    
    request().then( val => {
    	console.log( val );
    }).catch( err => {
    	console.log( err );
    });
    

    2、回调函数

    const request = function(cb){
    	let num = Math.round(Math.random()*100)/100;
    	console.log(num);
        setTimeout(function(){
    		num < 0.5 ? cb('1234567') : cb('abcdefg');
    	},500)
    }
    
    var result = request(function(res){
    	console.log(res);
    })
    

    3、async await

    const request = async function(){
    	let num = Math.round(Math.random()*100)/100;
    	console.log(num);
        const result = await aa(num);
    }
    
    function aa(num){
    	setTimeout(function(){
    		console.log(num < 0.5 ? '1234567' : 'abcdefg');
    	},500)
    }
    
    request();
    
  • 相关阅读:
    java9新特性-9-语法改进:try语句
    10.04 FZSZ模拟Day1 总结
    10.03模拟总结
    HNOI2012 永无乡
    ZJOI2007 报表统计
    HNOI2004 宠物收养场
    HNOI2002 营业额统计
    Splay 区间反转
    Splay基本操作
    HEOI2016 树
  • 原文地址:https://www.cnblogs.com/lfnumber7/p/12543562.html
Copyright © 2011-2022 走看看