热门搜索 :
汽车文化
您的当前位置:首页正文

node.js中的fs.futimes方法使用说明_node.js

2023-12-05 来源:学车网

方法说明:

更改一个文件所提供的文件描述符引用的文件的时间戳。

简称 更改时间戳

语法:

代码如下:fs.futimes(fd, atime, mtime, callback)

由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )

接收参数:

fd 标识符

atime

mtime

callback 回调

例子:

代码如下:fs.open('/path/demo1.txt', 'a', function (err, fd) { if (err) { throw err; } fs.futimes(fd, 1388648322, 1388648322, function (err) { if (err) { throw err; } console.log('futimes complete'); fs.close(fd, function () { console.log('Done'); }); });});

源码:

代码如下:fs.futimes = function(fd, atime, mtime, callback) { atime = toUnixTimestamp(atime); mtime = toUnixTimestamp(mtime); binding.futimes(fd, atime, mtime, makeCallback(callback));};

小编还为您整理了以下内容,可能对您也有帮助:

node js 内置的 fs 模块有哪些用处?

fs 模块是 Node.js 的内置模块之一,用于对系统文件及目录进行读写操作。它提供了同步和异步两种形式的方法,包括文件读取、写入、删除、复制、移动等操作。其中,fs.readFile() 方法可以读取文件内容,fs.writeFile() 方法可以写入文件内容,fs.unlink() 方法可以删除文件,fs.rename() 方法可以移动或重命名文件等等 。

node.js语法

全局对象可以在程序的任何地方进行访问,可以为程序提供经常使用的特定功能

const url=require('url')

const querystringl=require('querystring')

异步编程的含义是指在执行异步操作的时候,不会影响其他语句的执行

回调函数类似于C++中的递归,但是不同的是,node.js中的递归实在使用函数的时候,嵌套调用

fB()和fA()都是一个函数

在javascript中监听:

on(eventName,eventHandler)
handler一般指的是一个对象

当对象满足事件发生的条件时,Node.js就会自动触发监听事件,执行监听事件中事件*的函数内容。但是,我们也需要主动触发监听事件,此时,使用方法emit()
on(eventName,eventHandler)

在第一部分中,我们介绍了process对象,这是一个全局对象。这个对象主要是用来描述程序的状态的。我们前面都是在process对象上进行添加监听事件,删除监听事件等操作的。之所以有这些操作,是因为process对象已经继承了EventEmitter这个类,所以我们可以直接用EventEmitter的方法。我们也可以自己定义一个EventEmitter对象,来实现事件监听

package.json相当于说明书,可以让项目开发者对包的信息一目了然,其中有各种描述信息

NPM(node package manager),同Node.js一起安装的包管理和分发工具,能够很方便的让JavaScript开发者下载、安装、上传、管理已经安装的包。
npm安装包后,会自动在项目的当前目录下创建一个目录,目录的名称叫做node_moles,然后把第三方包自动放在该目录下

createServer()可以创建server对象

server.listen(port)启动服务器
server.close()关闭服务器

response.writeHead(statusCode,statusMessage,headers)
response.end(data,encoding,callback)
end就可以输出内容返回给客服端

暂未明白如何使用

回调函数callback参数error可以得到异常,直接判断error是否存在即可

fs.readdir(path,function(err,files){})
err得到异常,files得到目录

需要npm安装mysql模块

node.js语法

全局对象可以在程序的任何地方进行访问,可以为程序提供经常使用的特定功能

const url=require('url')

const querystringl=require('querystring')

异步编程的含义是指在执行异步操作的时候,不会影响其他语句的执行

回调函数类似于C++中的递归,但是不同的是,node.js中的递归实在使用函数的时候,嵌套调用

fB()和fA()都是一个函数

在javascript中监听:

on(eventName,eventHandler)
handler一般指的是一个对象

当对象满足事件发生的条件时,Node.js就会自动触发监听事件,执行监听事件中事件*的函数内容。但是,我们也需要主动触发监听事件,此时,使用方法emit()
on(eventName,eventHandler)

在第一部分中,我们介绍了process对象,这是一个全局对象。这个对象主要是用来描述程序的状态的。我们前面都是在process对象上进行添加监听事件,删除监听事件等操作的。之所以有这些操作,是因为process对象已经继承了EventEmitter这个类,所以我们可以直接用EventEmitter的方法。我们也可以自己定义一个EventEmitter对象,来实现事件监听

package.json相当于说明书,可以让项目开发者对包的信息一目了然,其中有各种描述信息

NPM(node package manager),同Node.js一起安装的包管理和分发工具,能够很方便的让JavaScript开发者下载、安装、上传、管理已经安装的包。
npm安装包后,会自动在项目的当前目录下创建一个目录,目录的名称叫做node_moles,然后把第三方包自动放在该目录下

createServer()可以创建server对象

server.listen(port)启动服务器
server.close()关闭服务器

response.writeHead(statusCode,statusMessage,headers)
response.end(data,encoding,callback)
end就可以输出内容返回给客服端

暂未明白如何使用

回调函数callback参数error可以得到异常,直接判断error是否存在即可

fs.readdir(path,function(err,files){})
err得到异常,files得到目录

需要npm安装mysql模块

node.js 基础操作

require 函数用来在一个模块中引入另外一个模块。传入一个模块名,返回一个模块导出对象。用法: let cc = require("模块名") ,其中模块名可以用绝对路径也可以用相对路径,模块的后缀名.js可以省略。例如:

require()函数用两个作用:

exports 对象用来导出当前模块的公共方法或属性,别的模块通过 require 函数使用当前模块时得到的就是当前模块的 exports 对象。用法: exports.name ,name为导出的对象名。例子:

mole.exports 用来导出一个默认对象,没有指定对象名,常见于修改模块的原始导出对象。比如原本模块导出的是一个对象,我们可以通过mole.exports修改为导出一个函数。如下:

3.加载第三方包

Node.js中使用 CommonJs 模块化机制,通过 npm 下载的第三方包,我们在项目中引入第三方包都是: let xx = require('第三方包名') ,究竟 require 方法加载第三方包的原理机制是什么,今天我们来探讨下。

require('第三方包名') 优先在加载该包的模块的同级目录 node_moles 中查找第三方包。

找到该第三方包中的 package.json 文件,并且找到里面的 main 属性对应的入口模块,该入口模块即为加载的第三方模块。

如果在要加载的第三方包中没有找到 package.json 文件或者是 package.json 文件中没有 main 属性,则默认加载第三方包中的 index.js 文件。

如果在加载第三方模块的文件的同级目录没有找到 node_moles 文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找 node_moles 文件夹,查找规则如上一致。

如果一直找到该模块的磁盘根路径都没有找到,则会报错: can not find mole xxx 。

4.npm命令

npm 英文全称: node package manager ,npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。来自各大洲的开源软件开发者使用 npm 互相分享和借鉴。包的结构使您能够轻松跟踪依赖项和版本。我们平时开发项目都是需要使用npm下载依赖,常见的npm命令总结如下:

5.文件读取

var fs = require('fs')

同步:

var content = fs.readFileSync('hello.txt',{flag:'r',encoding:"utf-8"})

异步(默认):

flag:读取模式

encoding:编码格式

7.文件写入

var fs = require('fs')

格式:write=>w read=>r append =>a

异步:

8.文件删除

fs . unlink ( 'lc.txt' , function (){

9.buffer缓冲区

1、数组不能进行二进制数据的操作2、js数组不像java、python等语言效率高3、buffer内存空间开辟出固定大小的内存

let buf1 = Buffer.alloc(10)

console.log(buf1)

allocUnsafe(之前的一些内容)(效率高)

10.文件目录

var fs = require('fs')

fs.readdir(path,callback)

导入 readline 包

let readline = require('readline');

实例化接口对象(process对象,stdout/in输入输出)

question方法 提问

close 事件监听

11.文件流

var fs = require('fs')

语法: fs.createWriteStream(文件路径,【可选的配置操作】)

let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"});

let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"});

实践

fs.createReadStream(路径,【可选的配置项】)

文档

let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"})

音乐

let rs = fs.createReadStream('snake.mp4',{flags:'r'})

读取时写入

let ws = fs.createWriteStream('a.txt',{flags:"w",encoding:"utf-8"})

createReadStream.pipe(createWriteStream)

链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。

接下来我们就是用管道和链式来压缩和解压文件。

创建 compress.js 文件, 代码如下:

代码执行结果如下:

执行完以上操作后,我们可以看到当前目录下生成了 input.txt 的压缩文件 input.txt.gz。

接下来,让我们来解压该文件,创建 decompress.js 文件,代码如下:

12.node事件

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js 几乎每一个 API 都是支持回调函数的。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

没有使用 events 包 仅使用JavaScript事件监听进行事件驱动

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为 webserver 一直接受请求而不等待任何读写操作。(这也称之为非阻塞式IO或者事件驱动IO)

在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:

以下程序绑定事件处理程序:

我们可以通过程序触发事件:

接下来让我们执行以上代码:

在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。

接下来让我们来重新看下前面的实例,创建一个 input.txt ,文件内容如下:

创建 main.js 文件,代码如下:

以上程序中 fs.readFile() 是异步函数用于读取文件。如果在读取文件过程中发生错误,错误 err 对象就会输出错误信息。

如果没发生错误,readFile 跳过 err 对象的输出,文件内容就通过回调函数输出。

执行以上代码,执行结果如下:

接下来我们删除 input.txt 文件,执行结果如下所示:

因为文件 input.txt 不存在,所以输出了错误信息。

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。所有这些产生事件的对象都是 events.EventEmitter 的实例。

events 模块只提供了一个对象:events.EventEmitter。EventEmitter 的核心就是事件触发与事件*功能的封装。

你可以通过require("events");来访问该模块。

EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的*时,newListener 事件会触发,当*被移除时,removeListener 事件被触发。

下面我们用一个简单的例子说明 EventEmitter 的用法:

执行结果如下:

运行这段代码,1 秒后控制台输出了 'some_event 事件触发'。其原理是 event 对象注册了事件 some_event 的一个*,然后我们通过 setTimeout 在 1000 毫秒以后向 event 对象发送事件 some_event,此时会调用some_event 的*。

EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件*。

当事件触发时,注册到这个事件的事件*被依次调用,事件参数作为回调函数参数传递。

让我们以下面的例子解释这个过程:

执行以上代码,运行的结果如下:

以上例子中,emitter 为事件 someEvent 注册了两个事件*,然后触发了 someEvent 事件。

运行结果中可以看到两个事件*回调函数被先后调用。这就是EventEmitter最简单的用法。

EventEmitter 提供了多个属性,如 onemiton函数用于绑定事件函数,emit属性用于触发一个事件。接下来我们来具体看下 EventEmitter 的属性介绍。

node.js 基础操作

require 函数用来在一个模块中引入另外一个模块。传入一个模块名,返回一个模块导出对象。用法: let cc = require("模块名") ,其中模块名可以用绝对路径也可以用相对路径,模块的后缀名.js可以省略。例如:

require()函数用两个作用:

exports 对象用来导出当前模块的公共方法或属性,别的模块通过 require 函数使用当前模块时得到的就是当前模块的 exports 对象。用法: exports.name ,name为导出的对象名。例子:

mole.exports 用来导出一个默认对象,没有指定对象名,常见于修改模块的原始导出对象。比如原本模块导出的是一个对象,我们可以通过mole.exports修改为导出一个函数。如下:

3.加载第三方包

Node.js中使用 CommonJs 模块化机制,通过 npm 下载的第三方包,我们在项目中引入第三方包都是: let xx = require('第三方包名') ,究竟 require 方法加载第三方包的原理机制是什么,今天我们来探讨下。

require('第三方包名') 优先在加载该包的模块的同级目录 node_moles 中查找第三方包。

找到该第三方包中的 package.json 文件,并且找到里面的 main 属性对应的入口模块,该入口模块即为加载的第三方模块。

如果在要加载的第三方包中没有找到 package.json 文件或者是 package.json 文件中没有 main 属性,则默认加载第三方包中的 index.js 文件。

如果在加载第三方模块的文件的同级目录没有找到 node_moles 文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找 node_moles 文件夹,查找规则如上一致。

如果一直找到该模块的磁盘根路径都没有找到,则会报错: can not find mole xxx 。

4.npm命令

npm 英文全称: node package manager ,npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。来自各大洲的开源软件开发者使用 npm 互相分享和借鉴。包的结构使您能够轻松跟踪依赖项和版本。我们平时开发项目都是需要使用npm下载依赖,常见的npm命令总结如下:

5.文件读取

var fs = require('fs')

同步:

var content = fs.readFileSync('hello.txt',{flag:'r',encoding:"utf-8"})

异步(默认):

flag:读取模式

encoding:编码格式

7.文件写入

var fs = require('fs')

格式:write=>w read=>r append =>a

异步:

8.文件删除

fs . unlink ( 'lc.txt' , function (){

9.buffer缓冲区

1、数组不能进行二进制数据的操作2、js数组不像java、python等语言效率高3、buffer内存空间开辟出固定大小的内存

let buf1 = Buffer.alloc(10)

console.log(buf1)

allocUnsafe(之前的一些内容)(效率高)

10.文件目录

var fs = require('fs')

fs.readdir(path,callback)

导入 readline 包

let readline = require('readline');

实例化接口对象(process对象,stdout/in输入输出)

question方法 提问

close 事件监听

11.文件流

var fs = require('fs')

语法: fs.createWriteStream(文件路径,【可选的配置操作】)

let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"});

let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"});

实践

fs.createReadStream(路径,【可选的配置项】)

文档

let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"})

音乐

let rs = fs.createReadStream('snake.mp4',{flags:'r'})

读取时写入

let ws = fs.createWriteStream('a.txt',{flags:"w",encoding:"utf-8"})

createReadStream.pipe(createWriteStream)

链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。

接下来我们就是用管道和链式来压缩和解压文件。

创建 compress.js 文件, 代码如下:

代码执行结果如下:

执行完以上操作后,我们可以看到当前目录下生成了 input.txt 的压缩文件 input.txt.gz。

接下来,让我们来解压该文件,创建 decompress.js 文件,代码如下:

12.node事件

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js 几乎每一个 API 都是支持回调函数的。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

没有使用 events 包 仅使用JavaScript事件监听进行事件驱动

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为 webserver 一直接受请求而不等待任何读写操作。(这也称之为非阻塞式IO或者事件驱动IO)

在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:

以下程序绑定事件处理程序:

我们可以通过程序触发事件:

接下来让我们执行以上代码:

在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。

接下来让我们来重新看下前面的实例,创建一个 input.txt ,文件内容如下:

创建 main.js 文件,代码如下:

以上程序中 fs.readFile() 是异步函数用于读取文件。如果在读取文件过程中发生错误,错误 err 对象就会输出错误信息。

如果没发生错误,readFile 跳过 err 对象的输出,文件内容就通过回调函数输出。

执行以上代码,执行结果如下:

接下来我们删除 input.txt 文件,执行结果如下所示:

因为文件 input.txt 不存在,所以输出了错误信息。

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。所有这些产生事件的对象都是 events.EventEmitter 的实例。

events 模块只提供了一个对象:events.EventEmitter。EventEmitter 的核心就是事件触发与事件*功能的封装。

你可以通过require("events");来访问该模块。

EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的*时,newListener 事件会触发,当*被移除时,removeListener 事件被触发。

下面我们用一个简单的例子说明 EventEmitter 的用法:

执行结果如下:

运行这段代码,1 秒后控制台输出了 'some_event 事件触发'。其原理是 event 对象注册了事件 some_event 的一个*,然后我们通过 setTimeout 在 1000 毫秒以后向 event 对象发送事件 some_event,此时会调用some_event 的*。

EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件*。

当事件触发时,注册到这个事件的事件*被依次调用,事件参数作为回调函数参数传递。

让我们以下面的例子解释这个过程:

执行以上代码,运行的结果如下:

以上例子中,emitter 为事件 someEvent 注册了两个事件*,然后触发了 someEvent 事件。

运行结果中可以看到两个事件*回调函数被先后调用。这就是EventEmitter最简单的用法。

EventEmitter 提供了多个属性,如 onemiton函数用于绑定事件函数,emit属性用于触发一个事件。接下来我们来具体看下 EventEmitter 的属性介绍。

forever让node.js持久运行

nodejs一般是当成一条命令执行的,当用户断开session,nodejs也就停止了运行。如何让nodejs持续在后台运行呢?

最简单粗暴的方法是使用Linux本身后台执行的特性

使用&符号后台执行,并利用nohup命令实现进程禁止挂起

nohup node app.js &

forever使用说明
启动相关

forever让node.js持久运行

nodejs一般是当成一条命令执行的,当用户断开session,nodejs也就停止了运行。如何让nodejs持续在后台运行呢?

最简单粗暴的方法是使用Linux本身后台执行的特性

使用&符号后台执行,并利用nohup命令实现进程禁止挂起

nohup node app.js &

forever使用说明
启动相关

nodejs——定时器

JavaScript中可以实现定时器功能的有两个函数——setTimeout和setInterval,二者的不同是setTimeout只执行一次,而setInterval是以指定的时间间隔重复执行。setTimeout可以使用clearTimeout取消,setInterval可以使用clearInterval取消。

有时,我们会用setTimeout(callback,0)将任务推迟一段很短的时间,但是其实通过process.nextTick(callback)来实现会更好,因为Node中的事件循环在一个处理事件队列的循环里运行,每循环一次称为一个“tick”。使用process.nextTick(callback)回调函数会在事件队列内所有事件处理完毕后,会在下次事件循环之前被调用,即进入下个event loop前执行;而setTimeout(callback,0)把回调延迟到后面的某个event loop执行,具体由设置的延时时间和event loop的执行时间决定。

这样可以保证my_async_function函数是顺序执行。

nodejs——定时器

JavaScript中可以实现定时器功能的有两个函数——setTimeout和setInterval,二者的不同是setTimeout只执行一次,而setInterval是以指定的时间间隔重复执行。setTimeout可以使用clearTimeout取消,setInterval可以使用clearInterval取消。

有时,我们会用setTimeout(callback,0)将任务推迟一段很短的时间,但是其实通过process.nextTick(callback)来实现会更好,因为Node中的事件循环在一个处理事件队列的循环里运行,每循环一次称为一个“tick”。使用process.nextTick(callback)回调函数会在事件队列内所有事件处理完毕后,会在下次事件循环之前被调用,即进入下个event loop前执行;而setTimeout(callback,0)把回调延迟到后面的某个event loop执行,具体由设置的延时时间和event loop的执行时间决定。

这样可以保证my_async_function函数是顺序执行。

在node.js中多个异步过程中如何判断执行是否完成(详细教程)

这篇文章主要给大家介绍了关于node.js多个异步过程中判断执行是否完成的几种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

前言

本文主要给大家介绍了关于node.js多个异步过程中判断执行是否完成的相关内容,可能这样说大家不是很明白,下面来一起看看详细的介绍吧。

场景:

想请求量较大的网络数据,比如想获取1000条结果,但数据处理速度慢,有超时的风险,可以分成10次处理,每次处理100条;所有请求完成后再统一进行处理。

这样的应用场景,可以这样处理:

方案一:判断请求到的数据条目

// 模拟网络请求

function fetch(url, callback) {

setTimeout(function (){

callback(null, {

subjects: [{

data: Math.round(Math.random() * 100)

}]

});

}, 2000);

}

// 实现方案1

function multiTask_1 () {

var arr = [];

var baseUrl = 'https://api.douban.com/v2/movie/top250';

for (var start = 0; start < 10; start++) {

var url = baseUrl + '?start=' + start + "&count=1";

fetch(url, function(error, res) {

var data = res.subjects;

arr = arr.concat(data);

// 调用完成后统一处理

if (arr.length === 10) {

console.log(arr);

}

});

}

}将运行结果用arr.length来判断,如果arr.length不像我们期望的那样,比如由于网络传输或者处理异常,少一条,那么我们将无法做后续的处理。这种处理方式强业务耦合;不具有普适性。

方案二:判断异步过程执行次数

// 方案2

function multiTask_2 () {

var taskWatcher = 0;

var arr = [];

var baseUrl = 'https://api.douban.com/v2/movie/top250';

for (var start = 0; start < 10; start++) {

taskWatcher++;

var url = baseUrl + '?start=' + start + "&count=1";

fetch(url, function(error, res) {

var data = res.subjects;

arr = arr.concat(data);

taskWatcher--;

if (taskWatcher === 0) {

console.log(arr);

}

});

}

}方案2 的判断条件,这里的 taskWatcher 充当异步任务执行情况的观察员,仅与异步过程的调用次数有关,且与其他处理过程无关。那有没有其他方案呢

方案三:Promise.all()

Promise.all(iterable) 方法返回一个 Promise, 它将在上述可迭代对象中的所有 Promise 被 resolve 之后被 resolve,或者在任一 Promise 被 reject 后被 reject。

function multiTask_3 () {

// var taskWatcher = 0;

var taskStack = [];

var arr = [];

var baseUrl = 'https://api.douban.com/v2/movie/top250';

for (var start = 0; start < 10; start++) {

taskStack.push(

new Promise((resolve, reject) => {

var url = baseUrl + '?start=' + start + "&count=1";

fetch(url, function(error, res) {

var data = res.subjects;

arr = arr.concat(data);

resolve();

});

})

);

}

Promise.all(taskStack).then(function () {

console.log(arr);

});

}这种方式更具有通用性,如果异步任务类型不同,也可以用这种方式来解决。不过应当注意reject的处理。避免其对最终处理的影响。

方案四: EventProxy

EventProxy是朴灵写的,https://github.com/JacksonTian/eventproxy

var ep = new EventProxy();

var arr = [];

ep.after('fetchData', 10, function (list) {

list.forEach(function(item){

arr = arr.concat(item);

});

console.log(arr);

});

var baseUrl = 'https://api.douban.com/v2/movie/top250';

for (var start = 0; start < 10; start++) {

var url = baseUrl + '?start=' + start + "&count=1";

fetch(url, function(error, res) {

var data = res.subjects;

ep.emit('fetchData', data);

});

}EventProxy基于事件订阅/发布模式,这里的after 方法可以侦听多次事件,回调中保存了多次异步任务的数据结果的数组;除此之外EventProxy还支持多个不同事件的侦听和处理。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

使用vue-cli如何配置接口代理

在NodeJs中如何使用form-data格式传输文件

在微信小程序中如何实现图片懒加载

使用js如何实现焦点图效果

node.js中常用的fs文件系统有哪些

本篇文章给大家带来的内容是关于node.js中常用的fs文件系统有哪些,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

fs文件系统模块对于系统文件及目录进行一些读写操作。

模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

创建文件

fs.writeFile(filename ,data,[options],function(err){})

如果文件存在,写入的内容会覆盖旧文件内容

filename (String) 文件名称

data (String | Buffer) 将要写入的内容,可以使字符串 或 buffer数据。

options (Object) option数组对象,包含

callback {Function} 回调,传递一个异常参数err。追加文件

fs.appendFile(path,data,[options],function(err){})

name : 文件名

str : 添加的字段

encode : 设置编码

callback : 回调函数 ,传递一个异常参数err读取文件

fs.readFile(path,options,function(err,data){})

filename 具体的文件保存路径地址

[options] 具体选项配置,包括数据的编码方式,

callback为具体的回调函数,进行相应的错误捕捉及提示。文件是否存在

fs.exists(path, function(exists){})

path 欲检测的文件路径

callback 回调注意此回调的参数和其他 Node.js 回调的参数不一致。不推荐在调用 fs.open,fs.readFile(),fs.writeFile() 之前使用 fs.exists()检测文件是否存在。这样做会引起竞争条件,因为在两次调用之间,其他进程可能修改文件。作为替代,用户应该直接开/读取/写入文件,当文件不存在时再处理错误。

删除文件

fs.unlink(path,function(err){})

path - 文件路径

callback - 回调函数,err创建文件夹

fs.mkdir(name,function(err){})

path - 文件路径。

callback - 回调函数,err,异步地创建目录。 完成回调只有一个可能的异常参数。删除文件夹

fs.rmdir(path,function(err){})

path - 文件路径。

callback - 回调函数,没有参数。读取文件夹

fs.readdir(path,function(err,files){})

path - 文件路径。

callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表改名字

fs.rename(oldname,newname,function(err){})

修改文件名称,可更改文件的存放路径。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

Top