javascript - Node js/js : Text not appended in file in sequence

标签 javascript node.js

我正在尝试在使用 expressunirestasync 模块的代码块中写入状态信息日志,如下所示。

const fsTest = require("fs");

app.post(someURL, function (req, res) {
    fsTest.appendFile("c:/fs.txt","\r\nInOf")   
    async.series({
        one: function (callback) {
                fsTest.appendFile("c:/fs.txt","\r\nInOf2")
                someOperation();        
                fsTest.appendFile("c:/fs.txt","\r\nInOf3")
                callback(false,"");         
        },
        //form search query
        two: function (callback) {
            fsTest.appendFile("c:/fs.txt","\r\nInOf4")
            anotherOperation();
            urClient.post("https://" + server + url)
                .header('Content-Type', 'application/json')             
                .send(qrySearchJSON)
                .end(
                    function (response) {
                    });
        }
    },  function (err,oResp) {
            errHandler();
        });
});

但是我的日志总是出现乱序,如下所示:

InOf2
InOf4
InOf3
InOf

InOf
InOf2
InOf3
InOf4

InOf
InOf2
InOf4
InOf3

InOf2
InOf
InOf4
InOf3

InOf
InOf2
InOf3
InOf4

可能是什么原因以及我应该采取什么方法来解决它。

最佳答案

这是因为 fs.appendFile() 是异步的。另一方面,您可以像同步一样运行它。

最简单(不是最好)的解决方案是使用 fs.appendFileSync() - 它会按照您的预期运行。

如果您处理 appendFile 的异步特性,那就更好了。像这样的事情:

const fsTest = require("fs");

app.post(someURL, function (req, res) {
    fsTest.appendFile("c:/fs.txt","\r\nInOf")   
    async.series({
        one: function (callback) {
                appendFile("c:/fs.txt","\r\nInOf2").then(function(){
                    someOperation();
                    return appendFile("c:/fs.txt","\r\nInOf3");
                }).then(function(){
                    callback(false,"");         
                }).catch(function(err){})
        },
        //form search query
        two: function (callback) {
            appendFile("c:/fs.txt","\r\nInOf4").then(function(){
                anotherOperation();
                urClient.post("https://" + server + url)
                    .header('Content-Type', 'application/json')             
                    .send(qrySearchJSON)
                    .end(
                        function (response) {
                        });
            }).catch(function(err){});
        }
    },  function (err,oResp) {
            errHandler();
        });
});

function appendFile(file, content) {
    var promise = new Promise(function(resolve, reject) {
        fsTest.appendFile(file, content, function(err) {
            if (err) {
                reject(err);
            } else {
                resolve();
            }
        });
    });

    return promise
}

您可以改用 async/await 或生成器。
看看co npm 模块 - 它做了一些奇特的事情。

关于javascript - Node js/js : Text not appended in file in sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44067822/

相关文章:

node.js - 如何使用标准终端命令从 Node 执行 git 命令

node.js - Mongoose 填充子文档数组

javascript - 使用 d3.mouse 事件作为工具提示的面积图的 d3js Angular Directive(指令)

javascript - 按预定义规则对数组进行排序

javascript - 如何使元素固定但仅在滚动时相对于其父元素?

javascript - 为什么 Google Chrome 找不到我的 app.js 文件

node.js - 静态文件在本地提供,但不通过 nginx

javascript - 如何将二进制字符串转换为base64

javascript - 从特定 Javascript 生成 v4 UUID

javascript - 获取数据时如何处理表名中的百分号