【发布时间】:2015-10-01 23:31:04
【问题描述】:
我使用下面的代码调用了两个模块,但是调用操作是在验证文件之前调用的(我在调试中看到过)。我应该做些什么来验证validateFile 在appHandler.invokeAction 之前被调用?我应该使用承诺吗?
var validator = require('../uti/valid').validateFile();
var appHandler = require('../contr/Handler');
appHandler.invokeAction(req, res);
更新
这是验证文件代码
var called = false;
var glob = require('glob'),
fs = require('fs');
module.exports = {
validateFile: function () {
glob("myfolder/*.json", function (err, files) {
var stack = [];
files.forEach(function (file) {
fs.readFile(file, 'utf8', function (err, data) { // Read each file
if (err) {
console.log("cannot read the file", err);
}
var obj = JSON.parse(data);
obj.action.forEach(function (crud) {
for (var k in crud) {
if (_inArray(crud[k].path, stack)) {
console.log("duplicate founded!" + crud[k].path);
break;
}
stack.push(crud[k].path);
}
})
});
});
});
}
};
【问题讨论】:
-
这完全取决于
validateFile的实现。它会返回一个承诺吗?它是否接受回调作为参数?回答这个问题,你就回答了你的问题。 -
@DenysSéguret - 我可以分享验证文件,请查看我的更新
-
@DenysSéguret - 请查看我的更新代码
-
所以重点是
fs.readFile(file, 'utf8', function (err, data) { // Read each file这是async你的validateFile应该更改为接受回调,并在fs.readFile的成功回调的最后调用它。 -
@so 在完成所有过程之前如何进行验证?我的意思是invokeAction函数,有办法吗?
标签: javascript node.js promise q bluebird