运行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文件并从头开始,但我无法理解。
我正在考虑配置问题?
答案 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?”标题下的页面中记录了此要求