您的位置:首页 > Web前端 > JavaScript

js promise的用法

2018-01-23 15:54 155 查看
近期在看模块化开发,然后涉及到了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(){
// 失败时执行
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: