bluebird的promiseall浅析

Promise.all

hexo中load方法使用了Promise.all,来看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
Hexo.prototype.load = function(callback){
var self = this;

return loadDatabase(this).then(function(){
return Promise.all([
self.source.process(),
self.theme.process()
]);
}).then(function(){
return self._generate({cache: true});
//只有当上面两个方法都执行成功后才会调用_
}).nodeify(callback);
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var Promise = require('bluebird');

var call = function(name, args, callback){
if (!callback && typeof args === 'function'){
callback = args;
args = {};
}

return Promise.all([
(function(){
console.log('1');//这里会打印
//var i = '5';
})(),
(function(){
//console.log('2');//这里不会打印

throw '2';
})(),
(function(){
console.log('6');//这里不会打印
})()
]).then(function(){//数组里的都通过才会打印3
console.log('3');
}).nodeify(callback);
};

call('new', '2',function(e){
console.log('nodeify');
console.log(e);
console.log('callback'); //进入reject会调用callback

//throw ;
}).then(function() {
console.log('then');
}).catch(function(err) {
console.log('end');
console.log(err);//进入reject会调用
});
欢迎关注我的公众号:沉迷Spring
显示 Gitment 评论
0%