JS-异步编程

学习技巧:精通回调的思想,精通异步编程的思想,然后可学会promise

回调函数

function fn(callback) {
	setTimeout(function () {
		console.log("神仙树");
		callback("千里马");
	}, 1000);
}

fn(function (data) {
	console.log(data);
});

 异步编程

function fn(az, a) {
	for (var i = 0; i < a; i++) {}
	az()
}
//异步函数
console.log("nice")
fn(function () {
	console.log("to")
}) //这个函数内部要一个打印"to"
console.log("meet")
// fn函数不可能是异步函数,但是是js的底层,c/c++是有不阻塞代码的异步函数的
setTimeout(function () {
    console.log("you")
}, 1000)
console.log("well")

 promise语法

Promise是一个构造函数,创建了一个数据容器,它主动产生数据,不用给它添加数据,而是它自己产生数据

fn(function(){console.log(1)})是阻塞异步

setTimeout()函数是一个非阻塞的异步函数

promise对象的then函数也是一个非阻塞的异步函数

var x = new Promise(function (a, b) {
	var y = Math.floor(Math.random()*10)
	a(y) //a调用了 就代表x产生了数据
})

// x数据容器取数据用then函数
var re = x.then(function (data) {
	console.log(data, 111)
	return 200
})
// then函数是一个异步函数
console.log(222)
re.then((data) => {
	console.log(data, 2222222)
})

then函数的返回值是一个新的promise对象

 是then传入的回调函数的返回值:

(1)如果是一个promise对象 那么就是它

(2)如果不是一个promise对象,那么就会把函数的结果包装为一个生成数据了的promise对象

任务的队列分类

任务指的就是js代码中的运行的代码

任务分为同步任务和异步任务

同步任务:

function fn(a){}
var a=new Array()
var b=fn()

异步任务

console.log(0)  //先执行
setTimeout(() => {
	setTimeout(() => {
		console.log(1)  //
	}, 1000)
	console.log(2)
	var p2 = new Promise((n1, n2) => {
		n1(1000)
	})
	p2.then(() => {
		console.log(3)
	})
}, 0)
var p1 = new Promise((n1, n2) => {
	n1(1000)
})
p1.then(() => {
	console.log(4)  //Ⅱ
})
console.log(5)  //先执行

 异步任务的队列优先级: 主任务最先执行,然后 异步微任务执行,再执行异步宏任务

任务开启后:内部执行的时候可能会有新的任务

宏:脚本就是一个宏任务

脚本运行 执行第一个宏任务:

(1)先执行同步任务

(2)添加新的宏任务到队列中 添加新的的异步微任务

(3)执行异步微任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值