【问题标题】:nodejs: async.series not executing functions in ordernodejs:async.series 未按顺序执行函数
【发布时间】:2017-10-02 02:56:31
【问题描述】:

在以下代码中,async.series 块没有按顺序执行。

var fs = require("fs");
var async = require("async");
var buffer = new Buffer(10);
var read = "";
var readByt;
async.series([
    function(callback) {
        console.log("test");
        callback();
    },
    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.");           
                })
            })
        })
        callback();
    },
    function (callback){
        console.log("console:"+read);
        console.log("console:"+read.substr(read.length-1));
        console.log("console:"+buffer.slice(0, readByt).toString());
        callback();
    }
],function(){});

通过命令行执行时,第三个块中的缓冲区打印发生在文件读取操作之前。

c:\>node fr.js
test
console:
console:
console: ?F     p?
}}}c:/log.txt
File closed successfully.

如何让这些按顺序执行?

【问题讨论】:

标签: javascript node.js


【解决方案1】:

您的回调将在每个异步函数完成后调用。在您的情况下, fs 操作是异步的,并在以后完成。在 fs 操作完成之前,回调将被调用。

试试这个,在 fs.close 中调用回调。

var fs = require("fs");
var async = require("async");
var buffer = new Buffer(10);
var read = "";
var readByt;
async.series([
    function(callback) {
        console.log("test");
        callback();
    },
    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."); 
                    callback();          
                })
            })
        })
    },
    function (callback){
        console.log("console:"+read);
        console.log("console:"+read.substr(read.length-1));
        console.log("console:"+buffer.slice(0, readByt).toString());
        callback();
    }
],function(){}); 

【讨论】:

  • 感谢@undefined - 非常明确的答案 - 完美运行
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2017-10-12
  • 2014-09-27
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多