1、回调函数:https://blog.csdn.net/baidu_32262373/article/details/54969696
注意:回调函数不一定需要用到 return。如果浏览器支持Promise对象,则可以不用回调函数实现程序。(个人感觉,Promise实现,就像把回调函数难道了外面,通过l链式结构实现)
引申:同步程序封装后,通过return返回值,就可以把需要的值给别人。异步程序封装后,只能通过回调函数把值给别人。不然无法获得预期的值
2、请求接口的管理:一般一个接口,可能会出现多个地方使用。如果把请求接口放在文件里,页面中使用这个接口,只要传入参数调用这个方法就可以了,及请求后的 执行的程序(即回调函数)。这样可以便于管理所有的接口。
function getStausList(obj,Callback) { axios.get('./json/stausList.json').then( function(res){ Callback(res.data); // axios.js中的ajax请求返回的数据是放在 res.data 对象里面的,而不是res }, function(){ alert('连接失败') } ) } getStausList(null,function(res){ // res 就是这个请求返回来的数据 // do sthing })
3、Promise的then里面的函数要用到then方法的,通过return 操作符 抛出去,就可以让所有的then方法都是链式的写法。这样不管是从可读性还是,逻辑清晰上都是好的。
abc().then( // abc是一个Promise对象( 如axios方法 ) (res) => { return rqubb() // rqubb 也是一个Promise对象 ( 如axios方法)
} ).then(
(res) => { // 这里res就是 rqubb 传入的参数了
// do sthing
}
)
promise视频学习笔记
1、
感悟:回调函数中里面 无法把里面值通过 return 返回出去,但是promise中的 resolve(
)可以把里面的值弄出来,传递到then的函数中。
回调函数之所以会出现回调地狱的问题,就是回调函数中值无法弄出来,只能不断的嵌套使用。但是 promise + async/await 解决了这个问题,从此js没有这个问题。
浏览器环境下的JavaScript Event Loop 扩展知识:参考链接
1、在JavaScript引擎的线程上【js引擎是单线程的】,会包含一个执行栈(按照栈后进先出的顺序处理栈中的任务);而在执行栈之外,会独立使用一个容器来专门管理异步状态,这个容器就是task queue (任务队列)。
Event Loop 处在两者之间,扮演一个调度者的角色,它会以一个固定的时间间隔不断轮询,当它发现执行栈空闲,就会去到 Task 队列里拿一个异步回调,把它塞入执行栈中执行。
2、任务队列中的任务会被分为两种:微任务(microtask)和宏任务(macrotask)【两种任务 是有优先级的】。
微任务的优先级 比 宏任务的要高,所以先执行 微任务 再执行 宏任务。
a、宏任务有:setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering。
b、微任务有:process.nextTick,Promise,注意process.nextTick是在Node环境中具有的。
3、宏任务和微任务到底是什么:https://www.jianshu.com/p/bfc3e319a96b
宏任务是由宿主发起的,而微任务由JavaScript自身发起。