关闭

解决异步的几种实现方式

时间: 2020-03-23阅读: 1406标签: 异步

如下代码

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();
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/8367

node的异步处理是怎么做的呢?

Node.js以其速度而闻名,因为它是非阻塞的。非阻塞意味着一个请求不会等待另一个请求结束(也就是异步的)。异步这一特性使Node.js成为当前吞吐量最大的框架

如何在Javascript中对数组的遍历使用异步函数

forEach 函数与 map 相似,但是它不返回结果,而是为每个元素运行该函数并丢弃结果。 实际上,重要的部分是调用函数的副作用。例如,将每个元素同步打印到控制台

Js如何处理循环的异步操作

compute.exec()这是个异步方法,在里面处理一些实际业务,这时候打印出来的很可能就是300,300,300(因为异步for循环还没有等异步操作返回Promise对象过来i值已经改变)

理解Javascript的异步

Javascript是单线程的编程语言,单线程就是说同一时间只能干一件事。放到编程语言上来说,就是说Javascript引擎(执行Javascript代码的虚拟机)同一时间只能执行一条语句。单线程语言的好处是你只管写不用担心并发问题。

JS常用的几种异步流程控制

JavaScript引擎是基于单线程 (Single-threaded) 事件循环的概念构建的,同一时刻只允许一个代码块在执行,所以需要跟踪即将运行的代码,那些代码被放在一个任务队列 (job queue) 中

如何优化async代码?更好的编写async异步函数

如何优化async代码?更好的编写async函数:使用return Promise.reject()在async函数中抛出异常,让相互之间没有依赖关系的异步函数同时执行,不要在循环的回调中/for、while循环中使用await,用map来代替它

promise/async/await的执行顺序

上述,在Chrome 66和node v10中,正确输出是:执行async1函数,此函数中又调用了async2函数,输出async2 end。回到async1函数,遇到了await,让出线程。遇到setTimeout,扔到下一轮宏任务队列

怎样取消 JavaScript 中的异步任务?

有时候执行异步任务可能是很困难的,尤其是在特定的编程语言不允许取消被错误启动或不再需要的操作时。幸运的是 JavaScript 提供了非常方便的功能来中止异步活动。在本文中,你可以学到如何创建可中止的函数。

处理异步事件的三种方式

在网站开发中,异步事件是项目必然需要处理的一个环节,也因为前端框架的兴起,通过框架实现的 SPA 已经是快速建构网站的标配了,一部获取数据也就成了不可或缺的一环;本文来就讲一讲 JavaScript 中异步的处理方式

深浅克隆和Promise异步编程

回调地狱:上一个回调函数中继续做事情,而且继续回调(在真实项目的AJAX请求中经常出现回调地狱)=>异步请求、不方便代码的维护,Promise的诞生就是为了解决异步请求中的回调地狱问题

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!