grunt-从回调返回解析的数据

grunt - return parsed data from callback

本文关键字:数据 返回 回调 grunt-      更新时间:2023-09-26

我想使用API蓝图,并用grunt自动制作它。我想读取apiary(API蓝图的工具)文件,解析它(使用Protactor,即Node.js的API蓝图解析器),将其字符串化为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

您遇到的问题是parser.parse()方法接受异步执行的回调。您不能像在同步方法中那样从回调返回值,因为您不知道它何时执行。解决方案是在回调中放置"return"逻辑。

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);
    });
});