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函数作为参数。 这里的原始承诺不能被正确执行。