【node】同步读取readFileSync和异步读取readFile的区别

先结论:异步读取文件的时候由操作系统在后台进行读取,不会阻碍下面的代码执行。同步读取的时候会阻碍下面的代码执行。

再案例:

test.js

var fs = require(‘fs‘);                //引入fs模块
console.log(‘start async read‘);        //异步读取开始
fs.readFile(‘test2.js‘,function(error,date){    //读取文件,回调函数第一个参数表示错误信息,第二个参数为读取的文本内容
    if(error){
        console.log(error);
    }else{
        console.log(‘end async read‘);    //异步读取结束
    }
});

console.log(‘start sync read‘); //同步读取开始
var date = fs.readFileSync(‘log.txt‘,‘utf-8‘); //date为文本内容
console.log(‘end sync read‘);    //同步读取结束

结果:

看出是按这个顺序执行的:异步读取开始---------->同步读取开始---------->同步读取结束---------->异步读取结束

异步读取没有结束,同步读取就完成了。

结论:异步读取没有阻塞下面代码的执行。

调换一下代码就更明显了

var fs = require(‘fs‘);                //引入fs模块

console.log(‘start sync read‘); //同步读取开始
var date = fs.readFileSync(‘log.txt‘,‘utf-8‘); //date为读取的文本内容
console.log(‘end sync read‘);    //同步读取结束

console.log(‘start async read‘);        //异步读取开始
fs.readFile(‘test2.js‘,function(error,date){    //读取文件,回调函数第一个参数表示错误信息,第二个参数为读取的文本内容
    if(error){
        console.log(error);
    }else{
        console.log(‘end async read‘);    //异步读取结束
    }
});

结果:

看出是按这个顺序执行的:同步读取开始---------->同步读取结束---------->异步读取开始---------->异步读取结束

结论:同步读取阻塞下面代码执行。

原文地址:https://www.cnblogs.com/makai02323/p/10050229.html

时间: 2024-10-12 20:22:24

【node】同步读取readFileSync和异步读取readFile的区别的相关文章

node.js同步及异步读取写入删除文件1

node.js初学中,在文件中同步及异步读取文档的过程: 1.同步读取: var fs=require("fs") //直接读取文档,并将同步返回值,赋值给变量 var data=fs.readFileSync("input.txt"); console.log(data.toString()); 2.异步读取: var fs=require("fs"); //通过回调函数返回获得的data值: fs.readFile("input.t

Node.js 回调函数 1) 阻塞 ,同步 2) 非阻塞 ,异步.

1.阻塞. 同步. 1) 读取的文件: input.txt 菜鸟教程官网地址:www.runoob.com 2) main.js 1 var fs = require("fs"); 2 3 //同步读取, 阻塞代码,按顺序执行的 4 var data = fs.readFileSync('input.txt'); 5 6 console.log(data); 7 console.log(data.toString()); 8 console.log("程序执行结束!"

利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题

async await 解决异步问题,这两个关键字是es7提出的,所以测试,node和浏览器版本提高一些 async await 操作基于promise实现的 async await这两个关键字是一起使用,分开使用会报错 await 后面只能跟promise对象 不熟悉的promise异步操作的朋友,去看看我promise那边文章 Promise 解决多层嵌套,回调地狱什么叫回调地狱写一个实例,就是恶心的多层欠嵌套 function a(){ function b(){ function c()

WP_图片管理机制/异步读取网络图片

项目有这样的需求, 要求窗口加载一揽子图片,为了不让UI阻塞太久,采用异步读取后绑定显示的方案. 图片的下载应该采用并发的过程(等待网络响应会很耗时,一张一张的下载,等待时间太长) 图片的下载不能占用过多的线程数,应有个阀值(图片不是核心业务,不能占用那么多资源) 在图片加载的过程中,如果用户有操作,比如窗口跳转,则未加载完成的图片加载的过程应取消(为了替用户节省流量). 需求就是这么多了,如何实现呢? 思路是这样的,由于需要异步,且需要等待,首先想到使用队列,先让队列排列起来,再定量迭代读取.

[html5+java]文件异步读取及上传核心代码

html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3.java端接受 核心代码: 1.拖拽代码段: 1 <div id="dropzone"> 2 <div>Drag & drop your file here...</div> 3 <div id='showFile'></di

项目中使用的ajax异步读取数据结构设计

设计稍微复杂了一点,完成ajax读取功能涉及到了很多页面.虽然如此,但感觉比较灵活. 和传统方法唯一的区别在于多了一层数据容器控件,里面提供了显示数据的HTML元素及相应的JS方法. 这样数据控件指生成纯数据. ajax异步读取 使用了jQuery.ajax,通过ajax POST方式请求后台处理ashx页面,并传递相关参数. ashx 完成动态加载用户控件,并根据接收的参数对控件的属性进行赋值. 加载控件,借助于博客园老赵的一篇博文,链接找不到了,以后再补. public class View

14.swoole学习笔记--异步读取文件

<?php //异步读取文件 swoole_async_readfile(__DIR__."/1.txt",function($filename,$content){ echo "$filename $content"; }); ?> 原文地址:https://www.cnblogs.com/zouke1220/p/8442155.html

同步(Synchronous)和异步(Asynchronous)方法的区别

同步(Synchronous)和异步(Asynchronous)方法的区别 在讲之前,我们先来看<Computer Organization>中对于同步和异步的一个例子: 同步读写和异步读写的区别: 同步读写:以读为例 处理器在第一个时钟周期将一个内存地址放到地址总线中,这一过程可能涉及到多条状态总线.当地址线建立后,处理器发出一个信号. 处理器在第二个时钟周期对内存发出读的信号,内存中的一个模块识别输送过来的地址 一个时钟周期后,该模块将数据放到数据总线上 处理器读取数据并取消读的信号. 异

同步回调函数和异步回调函数

回调函数 回调函数一般是在封装接口的时候,回调显得特别重要,我们首先假设有两个程序员在写代码,A程序员写底层驱动接口,B程序员写上层应用程序,然而此时底层驱动接口A有一个数据d需要传输给B,此时有两种方式: 1.A将数据d存储好放在接口函数中,B自己想什么时候去读就什么时候去读,这就是我们经常使用的函数调用,此时主动权是B. 2.A实现回调机制,当数据变化的时候才将通知B,你可以来读取数据了,然后B在用户层的回调函数中读取速度d,完成OK.此时主动权是A. 很明显第一种方法太低效了,B根本就不知