我想使用API蓝图并使用grunt自动生成。我想阅读apiary(API蓝图工具)文件,解析它(使用Protagonist,它是Node.js的API Blueprint Parser),将其字符串化为JSON格式并写入另一个文件。这是一项简单的任务,但我不知道该怎么做,我总是得到不确定的结果。以下是我到目前为止的情况:
grunt.registerTask('apiary2js', 'Generate js version of apiary file.', function () {
var parser = require('protagonist');
var content = grunt.file.read('apiary.apib');
var blueprint = parser.parse(content, function (error, result) {
if (error) {
console.log(error);
return;
}
return result.ast; <-- (how to return this value?)
});
var json = JSON.stringify(blueprint);
grunt.file.write('test/frontend/apiary.js', "var apiary = " + json);
});
导致apiary.js是这样的:
var apiary = undefined
答案 0 :(得分:2)
您遇到的问题是parser.parse()
方法接受异步执行的回调。您不能像在同步方法中那样从回调中返回值,因为您不知道它何时会被执行。解决方案是放置&#39;返回&#39;回调中的逻辑。
grunt.registerTask('apiary2js', 'Generate js version of apiary file.', function () {
var parser = require('protagonist');
var content = grunt.file.read('apiary.apib');
// Parse the contents of the file & execute the callback when done parsing.
parser.parse(content, function (error, result) {
if (error) {
console.log(error);
return;
}
// Now we can use the result as desired.
var json = JSON.stringify(result.ast);
grunt.file.write('test/frontend/apiary.js', "var apiary = " + json);
});
});