`

Nodejs 异步代码模式实战

 
阅读更多
1.输出当前目录下的所有文件的文件名

#Synchronous #

var fs = require('fs'),
    filenames,
    i,
    processId;

filenames = fs.readdirSync(".");
for (i = 0; i < filenames.length; i++) {
    console.log(filenames[i]);
}

console.log("Ready.");
processId = process.getuid();

#Asynchronous#

var fs = require('fs'),
      processId;

fs.readdir(".", function (err, filenames) {
    var i;
    for (i = 0; i < filenames.length; i++) {
        console.log(filenames[i]);
    }
    console.log("Ready.");
});

processId = process.getuid();

#-------------------------华丽分割线-------------------------#

2.授权,重命名

#Synchronous #

var fs = require('fs'),
    oldFilename,
    newFilename,
    isSymLink;

oldFilename = "./processId.txt";
newFilename = "./processIdOld.txt";

fs.chmodSync(oldFilename, 777);
fs.renameSync(oldFilename, newFilename);

isSymLink = fs.lstatSync(newFilename).isSymbolicLink();

#Asynchronous#

var fs = require('fs'),
    oldFilename,
    newFilename;


oldFilename = "./processId.txt";
newFilename = "./processIdOld.txt";

fs.chmod(oldFilename, 777, function (err) {   
    fs.rename(oldFilename, newFilename, function (err) {
        fs.lstat(newFilename, function (err, stats) {
            var isSymLink = stats.isSymbolicLink();
        });
    });
});

#-------------------------华丽分割线-------------------------#

3.获得当前目录下所有文件的大小

#Synchronous #

var fs = require('fs');

function calculateByteSize() {
    var totalBytes = 0,
        i,
        filenames,
        stats;
    filenames = fs.readdirSync(".");
    for (i = 0; i < filenames.length; i ++) {
        stats = fs.statSync("./" + filenames[i]);
        totalBytes += stats.size;
    }
    console.log(totalBytes);
}

calculateByteSize();

#Asynchronous#

var fs = require('fs');

var count = 0,
    totalBytes = 0;

function calculateByteSize() {
    fs.readdir(".", function (err, filenames) {
        var i;
        count = filenames.length;


        for (i = 0; i < filenames.length; i++) {
            fs.stat("./" + filenames[i], function (err, stats) {
                totalBytes += stats.size;
                count--;
                if (count === 0) {
                    console.log(totalBytes);
                }
            });
        }
    });
}

#Asynchronous#


calculateByteSize();

#-------------------------华丽分割线-------------------------#

4.计算文件数

#Synchronous #

var fs = require('fs');

var path1 = "./",
    path2 = ".././";

function countFiles(path) {
    var filenames = fs.readdirSync(path);
    return filenames.length;
}

console.log(countFiles(path1) + " files in " + path1);
console.log(countFiles(path2) + " files in " + path2);

#Asynchronous#

var fs = require('fs');

var path1 = "./",
    path2 = ".././",
    logCount;

function countFiles(path, callback) {
    fs.readdir(path, function (err, filenames) {
        callback(err, path, filenames.length);
    });
}

logCount = function (err, path, count) {
    console.log(count + " files in " + path);
};

countFiles(path1, logCount); 
countFiles(path2, logCount);
分享到:
评论

相关推荐

    NodeJS实战

    NodeJS实战:深入理解与应用 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其事件驱动、非阻塞I/O模型而闻名,尤其适合用于构建高效、可伸缩的网络应用程序。本实战指南旨在帮助开发者从零基础开始,...

    nodejs实战第二季

    #### 四、Node.js异步编程模式 - **回调函数**:最原始的异步编程方式。 - 示例:`fs.readFile('data.txt', 'utf8', function(err, data) { /* ... */ });` - **Promise**:一种更优雅地处理异步操作的方式,解决...

    VUE + nodejs实战

    在“VUE + nodejs实战”项目中,我们将探讨如何结合Vue.js前端框架与Node.js后端技术构建一个完整的Web应用程序。Vue.js是一款轻量级的JavaScript库,它以其组件化、易用性和高效的虚拟DOM著称,而Node.js则是一个...

    NodeJS精英班教学视频

    - **async/await**:ES2017引入了async/await语法糖,进一步简化了异步代码的编写。 #### 5. 事件循环机制 - **事件循环**:Node.js的事件循环机制负责管理所有的异步操作,它通过监听事件队列并调用相应的回调函数...

    Nodejs + mongoDB实战开发微博系统源码.zip

    在现代Web开发中,Node.js以其异步非阻塞I/O和高效的性能,已经成为构建实时应用的理想选择。MongoDB作为一个强大的NoSQL数据库,以其灵活的数据模型和高性能,常被用于处理大量非结构化数据。本实践教程将深入探讨...

    Nodejs入门经典

    通过学习这些源代码,读者可以更好地理解Node.js的编程模式和最佳实践,同时提升自己的编程能力。 总结来说,"Nodejs入门经典"是一份针对Node.js初学者的宝贵资源,它涵盖了Node.js的基本概念、核心模块以及实际...

    基于nodejs的微博爬虫

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript编写代码,提供了丰富的模块系统和非阻塞I/O模型,非常适合构建高性能的网络应用。 request库是Node.js中常用的HTTP...

    node-app-patterns:Pluralsight在注册过程中实践Nodejs应用程序模式

    《Node.js应用程序模式:Pluralsight实战指南》 在深入了解Node.js应用程序模式之前,我们首先需要理解Node.js的核心特性。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其非阻塞I/O和事件驱动的模型...

    Node.js Design Patterns Second Edition.pdf (node.js 设计模式)高清

    - **工厂模式**:使用工厂模式封装对象创建过程,使代码更加灵活和可扩展。 - **装饰者模式**:通过装饰者模式动态地给对象添加新的功能,而不改变其结构。 - **观察者模式**:实现观察者模式来定义对象之间的一对多...

    《NodeJS开发指南》.zip

    3. **-《NodeJS开发指南》.zip**:这可能是一个嵌套的压缩包,里面可能包含了详细的Node.js开发指南,包括基础概念、核心API、模块机制、异步编程模式、性能优化等方面的知识,对于深入理解Node.js非常有帮助。...

    Node.js-Nodejs学习笔记以及经验总结

    本学习笔记和经验总结将深入探讨Node.js的核心概念、主要特性、常用模块以及实战技巧,帮助你从零基础到熟练掌握Node.js。 一、Node.js核心概念 1. 非阻塞I/O模型:Node.js采用事件驱动、非阻塞I/O模型,提高了...

    nodejs视频教材-很通俗易懂的讲解

    - **async/await**:基于Promises之上的一种更简洁的异步编程语法糖,使异步代码看起来更像同步代码。 #### 7. 流(Streams) - **流的概念**:在Node.js中,流是一种数据处理模型,可以用来处理大量数据而不会耗尽...

    nodejs-in-action:《Node.Js 实战》上的例子做了一下

    在"nodejs-in-action-master"这个压缩包中,包含了《Node.js实战》书中各个示例的源代码。通过实际操作这些例子,你可以深入理解书中讲解的概念,并且提升解决实际问题的能力。这些例子覆盖了从基础的HTTP服务器创建...

    博客后台系统,nodejs express mongodb主要就是数据的增删查改,做为练手使用.zip

    标题中的“博客后台系统,nodejs express mongodb主要就是数据的增删查改”指的是一个基于Node.js、Express框架和MongoDB数据库构建的博客管理后台。这个项目主要用于实践和学习,帮助开发者掌握基本的Web开发技能。...

    7 天學習NodeJ

    NodeJS的诞生主要归功于其作者Ryan Dahl,他旨在创建一个高性能的Web服务器平台,利用了事件驱动和异步I/O的优势。由于JavaScript没有内置的IO功能,且对事件处理有良好的支持,同时拥有广泛的开发者基础,因此被选...

Global site tag (gtag.js) - Google Analytics