Node.js Promise没有按顺序执行

在我启动Web服务器之前,我想为configuration文件创build一些本地目录,而不是

// app.js var fsPromise = require('./fs-promise.js'); var httpPromise = require('./http-promise.js'); var promise = require('promise'); promise.all([fsPromise.createDir('configs'), fsPromise.createDir('logs')]) .then(httpPromise.startServer()); // fs-promise.js var fs = require('fs'); var promise = require('promise'); module.exports = { ... createDir: function(directory) { return new promise(function(fulfill, reject) { //console.log('Creating new dir: ' + directory); var newDir = __dirname + "\\" + directory; fs.mkdir(newDir, function(err) { if (err) { reject(); } else { console.log('Created new dir: ' + directory); fulfill(); } }); }); } } // http-promise.js ... module.exports = { startServer: function() { return new promise(function(fulfill, reject) { http.listen(configParams.server_port, function() { console.log('Server is running on port ' + configParams.server_port); fulfill(); }); }); } } 

但是,控制台打印输出如下所示:

 Server is running on port 3000 Created new dir: configs Created new dir: logs 

为什么首先创build目录? 不应该承诺,所有的投入承诺都完成后,才能回报新的承诺吗?

您正在传递调用函数httpPromise.startServer而不是函数本身的结果

这应该解决这个问题:

 promise.all([fsPromise.createDir('configs'), fsPromise.createDir('logs')]) .then(httpPromise.startServer); 

.then函数将callback函数作为参数。 这里的原始承诺不能被正确执行。