node - 异步函数未输出

时间:2015-10-15 01:39:19

标签: node.js gruntjs

运行v0.12.7

没有默认的fs函数正在运行。

示例是grunt.registerTask('commentTest', function (arg) { var fs = require('fs'); console.log('Outside Test 1'); console.warn('Outside Test 2'); fs.readdir('./', function (err, files) { console.log('Inside Test 1'); console.warn('Inside Test 2'); colsole.log(files); }); });

Outside Test 1
Outside Test 2

所以,如果我运行它,在控制台中我得到

grunt.registerTask('commentTest', function (arg) {
    var fs = require('fs');

    var files = fs.readdirSync('./');

    console.log(files);

});

但回调中没有任何内容。

如果我跑......

Dim trash As String
Dim conn As ADODB.Connection
Dim cmd1 As ADODB.Command
Dim rs1 As Recordset

Set conn = New ADODB.Connection
conn.ConnectionString = "datasource=ODBC;DSN=fna"
conn.Open

Set cmd1 = New ADODB.Command
cmd1.ActiveConnection = conn
cmd1.CommandType = adCmdStoredProc
cmd1.CommandText = "CalcStats"
cmd1.Parameters.Refresh
cmd1.Parameters.Append cmd1.CreateParameter("InputValue1", adInteger, adParamInput, , 3)
'cmd1.Parameters.Append cmd1.CreateParameter("OutputValue3", adInteger, adParamReturnValue)

cmd1.Execute

trash = cmd1.Parameters.Item(0).Value
conn.Close

我得到了这份工作的预期。

有些东西打破了异步,我不知道是什么。我已经完全清除了我的grunt文件并从头开始,但我无法理解。

我正在考虑配置问题?

1 个答案:

答案 0 :(得分:1)

这是因为Grunt不知道异步操作并会中断它,相信在function (arg)退出后任务已经完成。

您必须通过调用this.async()以及任务为done时通知Grunt任务是异步的,以便它可以继续执行下一个任务。

grunt.registerTask('commentTest', function (arg) {
    // tell grunt this task is asynchronous
    var done = this.async();
    var fs = require('fs');

    console.log('Outside Test 1');
    console.warn('Outside Test 2');

    fs.readdir('./', function (err, files) {
        console.log('Inside Test 1');
        console.warn('Inside Test 2');
        colsole.log(files);

        // tell grunt when the task is actually done
        // also of the `err` if one occurred
        done(err ? false : null);
    });
});

Grunt在Creating Tasks标题“Why doesn't my asynchronous task complete?”标题下的页面中记录了此要求