hexo中的Promise应用

hexo Promise的使用

hexo中的Promise用的是bluebird框架提供的,到处都是,基本上每个和执行命令相关的都用上了Promise,我们来看相关代码:

Promise.each:

位于hexo/index.js:Hexo.prototype.init

1
2
3
4
5
6
7
8
9
10
11
12
13
// Load config
return Promise.each([
'update_package', // Update package.json
'load_config', // Load config
'load_plugins' // Load external plugins & scripts
], function(name){
return require('./' + name)(self);
}).then(function(){
return self.execFilter('after_init', null, {context: self});
}).then(function(){
// Ready to go!
self.emit('ready');
});

遍历参数数组中的每个元素传递给参数方法

new Promise(func)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Hexo.prototype.call = function(name, args, callback){
if (!callback && typeof args === 'function'){
callback = args;
args = {};
}

var self = this;

return new Promise(function(resolve, reject){
var c = self.extend.console.get(name);

if (c){
c.call(self, args).then(resolve, reject);
} else {
reject(new Error('Console `' + name + '` has not been registered yet!'));
}
}).nodeify(callback);
};

实例化一个Promise,这个call是调用命令控制台命令的函数。

Promise.all

1
2
3
4
5
6
7
8
9
10
11
12
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);
};

调用所有数组中的方法。

欢迎关注我的公众号:沉迷Spring
显示 Gitment 评论
0%