2015-10-15 3 views
0

Выполнение v0.12.7Узел - асинхронные функции не выводят

Ни одна из функций fs по умолчанию не запущена.

Пример является fs.readdir

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

}); 

я получить то, что ожидается от работы.

Что-то нарушает асинхронность, и я не знаю, что. Я полностью очистил свой файл grunt и начал с нуля, но я не могу понять это.

Я смотрю, может быть, проблема с конфигурацией?

+0

«[Почему не асинхронная задача завершена?] (Http://gruntjs.com/creating-tasks # why-doesn-t-my-asynchronous-task-complete) " –

+0

@JonathanLonowski - почему бы не сделать это ответом? – jfriend00

ответ

1

Это происходит потому, что Grunt не знает о асинхронной операции и прервет ее, полагая, что задача завершилась после выхода function (arg).

Вам необходимо сообщить Grunt, что задача является асинхронной, вызывая this.async(), а также когда задание done, поэтому оно может перейти к следующему.

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

Грунт документов это требование в своей странице на Creating Tasks под заголовком «Why doesn't my asynchronous task complete?»

+0

Bummer это не появилось в моем поиске в Google. Спасибо хоть. – Plummer

Смежные вопросы