15-Promise

异步编程问题

  1. 如何让异步程序按顺序执行?
  2. 如何请求具有依赖关系的内容?

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的对象方法

  1. then() : 当promise返回resolve状态时,你可以调用then方法进行后续的操作
  2. catch() : 当promise返回reject状态时,你可以调用catch方法进行后续的操作

Promise当中的三种状态是什么?

  1. resolved : 成功状态
  2. rejected : 失败状态
  3. pending : 进行中状态

Promise的静态方法

  1. Promise.all() : 当all中所有的Promise对象都返回resolve时,这个promise对象才返回resolve状态。如果其中有一个promise对象返回reject时,当前的promise对象返回reject状态。

什么是同源策略?(浏览器规则的同源策略)(是为了保护自己网站中资源的安全)

同协议、同主机名(域名)、同端口

  1. http://www.baidu.com https://www.baidu.com 不是同源
  2. http://www.baidu.com http://www.qq.com 不是同源
  3. http://www.badu.com:80 http://www.baidu.com:8080 不是同源
  4. http://www.baidu.com/s http://www.baidu.com/u 是同源

问:ajax可否跨域访问资源?

  • 答:ajax是浏览器同源策略的限制,不可以跨域访问。

问:在什么情况下需要跨域访问资源?

  • 答: 如果需要访问不同协议或者不同主机名或者不同端口的域内访问资源时,需要跨域访问。

如何跨域访问?

  1. 后端:主要跨域的手段是由后端实现。
    代理
    xhr2
    Nginx
  2. 前端:
    jsonP :非官方协议

jsonP的工作原理:动态创建script标签,利用src的天然跨域属性,通过接口地址将请求发送给对方,将请求的数据通过回调函数返回。

get 与 post的区别?

  1. get

get传递速度快
get传递的数据小(1kB)
get的参数在请求行中传递(url地址后面)
get不安全,会留在历史记录中。

  1. post

post传递速度慢
post传递的数据大(2MB)
post的参数在请求体中传递
post相对安全,不会留下历史记录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值