异步编程问题
- 如何让异步程序按顺序执行?
- 如何请求具有依赖关系的内容?
Promise : ES6提出的异步编程解决方案?
//检测机构
//resolve : 表示成功的状态
//reject : 表示失败的状态
new Promise((resolve,reject) => {
if(处理异步程序){
resolve([参数]);
}else{
reject([参数]);
}
})
.then(([参数]) => {
...
})
.catch(([参数]) => {
...
})
//解决多个异步程序
new Promise((resolve,reject) => {
if(处理异步程序){
resolve([参数]);
}else{
reject([参数]);
}
})
.then(([参数]) => {
return new Promise((resolve,reject) => {
if(处理异步程序){
resolve([参数]);
}else{
reject([参数]);
}
})
})
.then(([参数]) => {
return new Promise((resolve,reject) => {
if(处理异步程序){
resolve([参数]);
}else{
reject([参数]);
}
})
})
……
.then(([参数]) => {
if(处理异步程序){
resolve([参数]);
}else{
reject([参数]);
}
})
.catch([参数] => {
})
// 3秒输出1,再过两秒输出2,再过1秒输出3,再过0.5秒输出4
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(1);
},3000)
})
.then((data)=>{
alert(data);
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(2);
},2000)
})
})
.then((data)=>{
alert(data);
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(3);
},1000)
})
})
.then((data)=>{
alert(data);
setTimeout(()=>{
alert(4)
},500)
})
Promise的对象方法
- then() : 当promise返回resolve状态时,你可以调用then方法进行后续的操作
- catch() : 当promise返回reject状态时,你可以调用catch方法进行后续的操作
Promise当中的三种状态是什么?
- resolved : 成功状态
- rejected : 失败状态
- pending : 进行中状态
Promise的静态方法
- Promise.all() : 当all中所有的Promise对象都返回resolve时,这个promise对象才返回resolve状态。如果其中有一个promise对象返回reject时,当前的promise对象返回reject状态。
什么是同源策略?(浏览器规则的同源策略)(是为了保护自己网站中资源的安全)
同协议、同主机名(域名)、同端口
- http://www.baidu.com https://www.baidu.com 不是同源
- http://www.baidu.com http://www.qq.com 不是同源
- http://www.badu.com:80 http://www.baidu.com:8080 不是同源
- http://www.baidu.com/s http://www.baidu.com/u 是同源
问:ajax可否跨域访问资源?
- 答:ajax是浏览器同源策略的限制,不可以跨域访问。
问:在什么情况下需要跨域访问资源?
- 答: 如果需要访问不同协议或者不同主机名或者不同端口的域内访问资源时,需要跨域访问。
如何跨域访问?
- 后端:主要跨域的手段是由后端实现。
代理
xhr2
Nginx - 前端:
jsonP :非官方协议
jsonP的工作原理:动态创建script标签,利用src的天然跨域属性,通过接口地址将请求发送给对方,将请求的数据通过回调函数返回。
get 与 post的区别?
- get
get传递速度快
get传递的数据小(1kB)
get的参数在请求行中传递(url地址后面)
get不安全,会留在历史记录中。
- post
post传递速度慢
post传递的数据大(2MB)
post的参数在请求体中传递
post相对安全,不会留下历史记录