2015-10-15 82 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); 

}); 

我得到了從作業的預期。

有些東西打破了異步,我不知道是什麼。我已經徹底清除了我的咕嚕文件並從頭開始,但我無法弄清楚。

我在看可能是一個配置問題?

+0

「[爲什麼我的異步任務完成了嗎?](http://gruntjs.com/creating-tasks #why-doesn-t-my-asynchronous-task-complete)「 –

+0

@JonathanLonowski - 爲什麼不作出回答? – jfriend00

回答

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

咕嚕文檔這一要求在其上Creating Tasks頁,標題下的「Why doesn't my asynchronous task complete?

+0

Bummer這沒有出現在我的谷歌搜索。謝謝,不過。 – Plummer