js promise的用法

近期在看模块化开发,然后涉及到了promise这种异步开发模式,于是总结一下,有不足之处,欢迎指正。

首先说一下,什么是promise,为什么会有promise的出现。

1、所谓 Promise,就是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API,可供进一步处理。

在我讲来,promise模式是一个异步编程模式,promise本身就是一个构造函数,实例化时接收一个函数作为参数,这个参数函数又有两个参数,即resolve和reject。

2、promise的出现,可以带来的好处:

  • 便于阅读
  • 用同步模式,编写异步代码,调试时简单、方便
  • 避免回调嵌套,即避免回调地狱

ES6 promise

先定义一个testService文件:

function test() {
    var promise = new Promise(function (resolve, reject){
        if (成功) {
            resolve(data);
        }else{
            reject(err);
        }
    })
    return promise;
}

然后调用时:

testService.test().then(function(){
    // 成功则执行该函数
},function(){
    // 失败则执行该函数
})

jquery Deffered 对象

在jquery里,ajax函数操作在1.5版本之后都已经重新封装支持了Deffered对象,
1.5版本之前: ajax()返回的是XHR对象
1.5版本之后: ajax()返回的是Deffered对象

ajax操作:

$.ajax({url, type..})
    .done(// 成功回调)
    .fail(// 失败回调)

非ajax操作:
先定义一个testService文件:

function test(){
    var def = $.Deffered();
    if(成功) {
        def.relsolve();
    }else{
        def.reject();
    }
    return def;
}

调用时:

testService.test().then(function(){
    // 成功时执行
},function(){
    // 失败时执行
})

angular $q

在angular中也支持promise,需要通过$q这个内置服务,用法如下

同样先定义一个testService文件:

function test(){
    var def = $q.deffer();

    $http.get({type, url})
         .then(function(){
             def.resolve(data)
         }, function(){
             def.reject(err)
         })

    return def.promise;
}

调用时:

testService.test().then(function(){
    // 成功时执行
},function(){
    // 失败时执行
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值