<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
1. 函数化编程
2. 异步编程
浏览器的一个软件 它的模型是多进程 多线程的!!
浏览器中解析js的v8引擎 是单线程的
而且在浏览器中 只有v8引擎有能力执行js代码
队列:
-->
</head>
<body>
</body>
<script>
setTimeout(()=>{
console.log("setTimeout")
},2000)
// 浏览器的事件循环机制
</script>
回调函数
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
回调分两种:
异步回调 是要被放进队列的
定时器的回调就是一个异步回调
同步回调 是不会被放进队列的
数组api中回调都是同步回调
-->
</head>
<body>
</body>
<script>
var arr = ["a","b","c"]
arr.forEach((item)=>{
console.log(item)
})
console.log("-----")
</script>
<script>
//回调函数 : 函数是你定义的 可是你没调用 最终它执行了
// executor : 执行器; 执行器是一个同步的回调函数
//在new Promise的时候 是先调用执行器 然后再返回实例对象
//Promise的实例对象有三个状态 : pending resolved rejected
//现在我们讨论的是 new Promise返回的实例
var p = new Promise((resolve, reject)=>{
//执行器中 如果都是同步代码 你就是在瞎用promise
//定时器的执行 是同步的!!!!
setTimeout(()=>{
//异步代码!!!!!!
resolve()
},2000)
})
</script>
<script>
var p = new Promise((resolve, reject)=>{
setTimeout(()=>{
throw new Error("xxx")
})
})
console.log(p);
</script>
<script>
// promise实例的状态产生改变 有什么意义?
var p = new Promise((resolve, reject)=>{
resolve()
})
p.then(()=>{console.log("1")},()=>{console.log("2")})
console.log(3)
</script>
<script>
//当then方法被执行完毕之后返回的也是一个promise
var p = new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve()
},2000)
})
p.then(()=>{
return new Promise((resolve, reject)=>{
setTimeout(()=>{
console.log(1)
resolve()
},1000)
})
}).then(()=>{
return new Promise((resolve, reject)=>{
setTimeout(()=>{
console.log(2)
resolve()
},1000)
})
})
console.log(3)
</script>
<script>
var p = new Promise((resolve, reject)=>{
resolve()
})
p.then(()=>{console.log("1");throw new Error("----")})
.then(()=>{console.log("2")})
.then(()=>{console.log("3")})
.then(()=>{console.log("4")})
.then(()=>{console.log("5")})
.then(()=>{console.log("6")})
// .then(()=>{},()=>{console.log("处理异常")})
.catch(()=>{console.log("处理异常");return Promise.reject()})
.then(()=>{console.log("7")},()=>{console.log("------")})
</script>