异步获取文件夹中的文件
Async in getting files in folder?
我是Node.js的新手。我在这里所做的只是在文件夹中获取文件列表。。。Node.js中的所有内容似乎都是异步的,但我的函数我希望它是同步的。所以,我做如下。
function getFiles() {
var file = [];
var walker = walk.walk('./files');
walker.on('file', function (root, stat, next) {
file.push(root + '/' + stat.name);
next();
})
walker.on('end', function () {
console.log(JSON.stringify(file));
})
return file;}
正如我所料:
["./files/1.mp3","./files/2.mp3","./files/3.mp3","./files/4.mp3","./files/5.mp3","./files/6.mp3","./files/7.mp3","./files/8.mp3"]
但当我把这个函数分配给变量时
var list = getFiles();
response.writeHead(200, {'Content-type':'application/json'});
response.end(JSON.stringify(list));
它总是返回nothing,我认为getFiles()
在另一个线程中运行,因此无法接收数据值。感谢您的阅读。
我可以通过概述应用程序运行时的流程来了解您正在经历的行为:
call to getFiles
declare files array and walker
bind walker event "file" and "end" to callbacks
return files array
walker file event fires
walker end event fires
正如您所看到的,方法调用正在带外触发事件。为了解决这个问题,常见的node.js方法是设置如下代码:
function getFiles(callback) {
var file = [];
var walker = walk.walk('./files');
walker.on('file', function (root, stat, next) {
file.push(root + '/' + stat.name);
next();
})
walker.on('end', function () {
callback(file);
})
}
现在,当你执行这个方法时,你会做这样的事情:
getFiles(function(list){
response.writeHead(200, {'Content-type':'application/json'});
response.end(JSON.stringify(list));
});
显然,这有点难看,因为控制器现在必须创建一个回调场景,而getFiles方法当然需要执行该回调。另一种方法是使用Promises概念,我将通过以下链接留给读者发现:https://github.com/kriskowal/q
- 异步函数在准备就绪之前返回
- 你不能返回你自己代码中没有的数据
- 异步函数通常采用回调参数,该参数在准备就绪时执行
- 您自己的代码可以请求自己的回调
`
function getFiles(callBack) {
var file = [];
var walker = walk.walk('./files');
walker.on('file', function (root, stat, next) {
file.push(root + '/' + stat.name);
next();
})
walker.on('end', function () {
console.log(JSON.stringify(file));
callBack(file);
})
}
// assuming server environment, express, connect, etc...
app.get('/list', function(req, res){
getFiles(function(D){ res.json(D) });
});
`
相关文章:
- 将配置文件文件夹移动到sdcardfirefoxmobile14.0
- Grunt imagemin-观察多个文件/文件夹优化单个文件
- Angular 2-模型驱动的表单,带有输入文件(文件上传)
- 将整个JavaScript文件文件夹添加到HTML5应用程序缓存中
- HTML或JavaScript,如何找出程序文件文件夹的位置
- 使用 OS 在 JavaScript 中预置文件.文件
- 使用纯 JavaScript 创建文件/文件夹
- 基本脚本,它向自己发送一封包含从文件文件夹中随机选择的内容的邮件
- 巴贝尔节点不't编译时忽略指定的文件/文件夹
- 在以下场景中,如何使代码可用于多个文件文件对象
- Chrome拖放文件/文件夹不工作
- Bootstrap fileinput删除所有文件文件,而不是要删除的特定预览文件
- 如何在SonarQube 4.4's技术债务计算中忽略文件/文件夹?
- OneDrive for Business是否有客户端javascript库提供文件/文件夹选择器控件?
- 将文件从插件复制到配置文件文件夹
- 从sd卡复制目录到“文件”;文件夹中
- 逐行读取上传的文件.文件,使用cfs:gridfs存储)
- 配置grunt copy任务,排除文件/文件夹
- 用于检查CSS和JS文件文件夹的工具
- gruntjs:将文件+文件夹重命名为任务