Fork me on GitHub

q.js入门

q.js入门及简单使用

q.js解决问题

1、q.js解决回调函数的嵌套问题,避免嵌套层级太深导致一系列的问题
2、q.js的所有方法操作的对象都得是一个promise对象。所以需要创建一个promise对象。

创建promise对象的方法

1、q.fcall
q.fcall传递给此方法一个返回值的函数或者一个defer实例,将会创建一个promise对象

1
2
3
var promise = Q.fcall(function() {
return [10,20]
})

2、q.defer
q.defer通过延迟对象来创建promise对象

1
2
3
4
5
6
7
8
9
10
11
12
var promise = function(num) {
var num = num || 10;
var deferred = Q.defer();
if(num){
deferred.resolve(num)
}else{
deferred.reject("error")
}
return deferred.promise
}

3、q.promise
q.promise传递此方法一个函数来创建promise对象

1
2
3
4
5
6
7
8
9
10
11
var promise1 = function(num) {
var num = num || 10;
return Q.promise(function(resolve,reject,notify){
if(num){
resolve(num)
}else{
reject("error")
}
});
}

使用promise对象

1、then方法:传入一个成功回调与一个异常回调

1
2
3
4
5
promise.then(function(success) {
},function(err) {
})

2、q.all
q.all使用此方法可以保证执行多个异步方法之后执行回调

1
2
3
4
5
q.all([promise, promise1]).then(function(success) {
},function(err) {
})

3、q.when
q.when使用此方法执行不带延迟对象以及延迟对象promise,不支持传递数组内带延迟对象

1
2
3
Q.when([promise,promise],function(success) {
})

q.js的链式调用

链式调用就是在成功回调内返回一个新的promise对象,假如之后的回调不需要获取闭包内容的话,可以直接返回,否则可以接着写then方法调用

1
2
3
4
5
promise.then(function() {
}).then(function() {
})

总结

q.js是一个非常好用的promise实现,前后端都可以用。以上展现的是浏览器端的使用。

-------------本文结束感谢您的阅读-------------