我必须阅读,编译多个jade文件然后使用这些文件。我使用bluebird promises库使用以下代码:
var indexJadeFile = 'template/index.jade';
var otherJadeFile = 'template/other.jade';
function readAndCompileJade(jadeFile){
fs.readFileAsync(jadeFile, 'utf8').then(function(content){
console.log('reading jade file: ' , jadeFile);
return jade.compile(content, {
pretty : true,
filename : jadeFile,
basedir : templateBaseDir
});
})
}
promise.all([
readAndCompileJade(indexJadeFile),
readAndCompileJade(postJadeFile),
readAndCompileJade(sitemapJadeFile),
readAndCompileJade(archivesJadeFile)])
.then(function(results){
console.log('results block');
compiledIndex = results[0];
compiledPost = results[1];
compiledSitemap = results[2];
compiledArchives = results[3];
});
我假设在执行所有jade文件之后将执行block。但是当我执行时,我发现在results block
语句之前打印了reading jade file
。
如何等待所有承诺完成,然后执行其余的块?
答案 0 :(得分:3)
那是因为您的readAndCompileJade
是同步的,并且不会返回承诺。
你必须回复一个承诺
promise.all
应该如何知道它何时应该继续?
在您的情况下,我假设fs.readFileAsync
是基于使用.then
的承诺,因此您可以将其返回:
function readAndCompileJade(jadeFile){
return fs.readFileAsync(jadeFile, 'utf8').then(function(content){
console.log('reading jade file: ' , jadeFile);
return jade.compile(content, {
pretty : true,
filename : jadeFile,
basedir : templateBaseDir
});
})
}