2017-05-04 10 views
3

次のコードを実行すると、async.seriesの最初の関数のみが実行されます。以下が編集されている場合は下記のようnodejs:Async.seriesは最初の関数のみを実行して停止します

c:\>node fr.js 
}}}c:/log.txt 
File closed successfully. 

var fs = require("fs"); 
var async = require("async"); 
var buffer = new Buffer(10); 
var read = ""; 
var readByt; 
async.series([ 
    function(callback) { 
     console.log("test"); 
    }, 
    function (callback){ 
     console.log("console: 1"); 
    } 
    function (callback){ 
     console.log("console: 2"); 
    } 
],function(){}); 

出力の変化を以下のように:

c:\>node fr.js 
test 

どう

var fs = require("fs"); 
var async = require("async"); 
var buffer = new Buffer(10); 
var read = ""; 
var readByt; 
async.series([  
    function(callback) { 
     console.log("console: 1"); 
    }, 
    function (callback){ 
     console.log("console: 2"); 
    } 
],function(){}); 

出力を以下に示します。私はasync.seriのすべての機能を取得しますか?実行するには?

+2

あなたは、各機能が実行されたときに 'async.series'が知っているように' callback'関数を呼び出していないように見えます。 – JohnnyHK

答えて

2

asyncモジュールが次の関数を呼び出すようにするには、関数の配列で指定された引数callbackを呼び出す必要があると思います。

1
var fs = require("fs"); 
var async = require("async"); 
var buffer = new Buffer(10); 
var read = ""; 
var readByt; 
async.series([  
    function(callback) { 
     fs.open('c:/ab.txt', 'r+', function(err, fd) { 
      fs.read(fd, buffer, 0, buffer.length, 0, function(err, bytes){ 
       read = buffer.slice(0, bytes).toString(); 
       readByt = bytes;   
       console.log("}}}"+read); 
       fs.close(fd, function(err){ 
        if (err){ 
        console.log(err); 
        } 
        console.log("File closed successfully.");   
       }) 
      }) 
     }) 
 //invoke here for continue and to break use callback(false); 
    callback() 
}, 
    function (callback){ 
     console.log("console:"+read); 
     console.log("console:"+read.substr(read.length-1)); 
     console.log("console:"+buffer.slice(0, readByt).toString()); 
    } 
],function(){}); 
関連する問題