一、什么是“回调地狱”
在了解“回调地狱”前,首先要明白什么是回调函数
1、回调函数
回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。回调函数通常用于事件处理、异步编程和处理各种操作系统和框架的API(接口)。
2、回调地狱
如果在回调函数中再传入一个函数,就会出现一个嵌套结构如此层层嵌套回调就会形成回调地狱。
setTimeout(function () {
console.log('从前有座山');
setTimeout(function () {
console.log('山上有座庙');
setTimeout(function () {
console.log('庙里有个老和尚在给小和尚将故事');
}, 3000)
}, 2000)
}, 1000)
可以看到上面就已经嵌套了3层,这种回调函数嵌套回调函数的情况叫回调地狱。
回调地狱就是为是实现代码顺序执行而出现的一种操作,它会造成我们的代码可读性非常差,后期不好维护。
3、解决方式
可以使用构造函数解决回调地狱
then:兑现承诺时运行的代码。即运行前面的代码后得到了想要的数据,就会走then
catch:拒绝承诺时运行的代码。
二、跨域(CORS)
跨域的问题是由同源策略导致的,那么什么是同源策略呢?
同源策略是由 Netscape 公司 1995 年引入浏览器,是一个重要的安全策略,它用于限制一个 源 的文档或者它加载的脚本如何能与另一个源的资源进行交互。 它能帮助阻隔恶意文档,减少可能被攻击的媒介。
同源: 同域名、同端口号、同协议
跨域的产生并不是同源策略阻止发送请求或后端无法响应,而是正常发送了请求,服务器也正常返回了数据,但浏览器这个老六不去加载数据而是丢弃了这些数据。
三、跨域的解决方式
反向代理:由客户端发送到代理服务器,再由代理服务器发送到需要访问的服务器