如何判断读取dir是否完成

2024-03-17

每个人 我正在使用 node-webkit 开发某种图像视图应用程序。我创建了一个函数来读取给定位置内的目录并搜索图像文件(*.jpg 和 *.png)。我使用的代码如下:
app.js

    var fs = require("fs");
    var gui = require('nw.gui');
    var win = gui.Window.get();
    var directory;
    var db = require('diskdb');
    var path = require('path')
    db = db.connect("lib/collections", ['temp']);


        function chooseFile(name) {
        var chooser = $(name);
        scr = 0;
        chooser.change(function(evt) {
            directory = $(this).val();
            var asdf;
            console.clear();
            readDir(directory);
            $(this).val('').hide();
        });
    }


    function readDir(directory){
    c = 0;
    console.log("reading "+directory);
if(fs.statSync(directory).isDirectory() == true){
    fs.readdir(directory,function(err,files){
        if (err){
            console.log(err);
            return;
        }           
        var ext;
        files.forEach(function(file){
            console.log("Got what: "+file);
            var fulls = directory+"\\"+file;
            if(file.indexOf(".") != 0){
                if(path.extname(fulls) == ""){
                    console.log("Got a directory: "+file);
                    if(fs.statSync(fulls).isDirectory() == true){
                        readDir(fulls);
                    }
                }
                else{
                    console.log("Got a file: "+file);
                    if(checkExtension(file, 'jpg,png')){
                        scr++;
                        c = saveTemp(fulls,scr,file);
                    }
                }
            }
        });
        if(c == 1){
            loadgun();
        }
    });
}
  }


        function loadgun(){
    if(db.temp.count()!=0){
        for(i=1;i<=db.temp.count();i++){
            var asd = db.temp.findOne({'id':i});
            var theTempScript = $("#tmpl-imgholder").html();
            var theTemp = Handlebars.compile(theTempScript);
            $("#ContentWrapper").append(theTemp({"fulls":asd.file, "id":asd.id, "title":asd.title}));
        }
    }
}

  saveTemp = function(file,id, title) {
    var savedUser = db.temp.save({
        file:file,
        id:id,
        title:title 
    });
    return 1;

};


    function checkExtension(str, ext) {
        extArray = ext.split(',');
        for(i=0; i < extArray.length; i++) {
            if(str.toLowerCase().split('.').pop() == extArray[i]) {
                return true;
            }
        }
        return false;
    };


$(document).ready(function(){
if(db.temp.count() != 0){
   loadgun();
}
else{
    $('#blah').css('display','block');
    chooseFile('#blah');
}
});

索引.html

<html>
.
.
.
<body>
<input type="file" nwdirectory id="blah" style="display:none"/>
    <script src="js/jquery.min.js"></script>
    <script src="js/app.js"></script>
    <script src="js/handlebars.js"></script>
    <script id="tmpl-imgholder" type="x-handlebars-template">
        <div class="image-container grid__item" data-id="{{id}}" data-src="{{fulls}}">
            <div class="cover" style="background:url({{fulls}})"  title="{{title}}"></div>
            <div class="info">
                <div class="title">{{title}}</div>
            </div>
            <div class="clear"></div>
        </div>
    </script>
</body>
</html>

在这里我尝试使用 loadgun 函数加载数据。它挂起 Node WebKit 窗口。如果我知道 readDir 函数何时终止,那么我就可以加载所需的数据。 如果还有其他方法请说一下。 提前致谢。


readDir 的问题是它是异步函数,这就是为什么你必须提供回调。但是,您可以使用同步的 fs.readdirSync(path) ,然后代码同步流动。伪代码可能如下所示:

function readDirAsynch(dir){
 var files = fs.readdirSync(dir);
  for (var i in files){
    if (files[i] isDir){
      readDirAsynch(files[i]);
    } else if (myCondition){
    //do somehting
   }
  }
}    

不用说,当函数调用后的下一行被执行时,您就知道该函数已完成

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断读取dir是否完成 的相关文章

  • 有没有办法将击键发送到节点中的终端?

    我特别想发送 ctrl l 清除终端 这样每次我测试脚本时终端都是干净的 如果您使用的是 Linux console log 033 2J 如果你使用的是 Windows 我认为这可行 将光标设置在 0 0 var util require
  • 如何让我的云代码在我的 Worker dyno(而不是 Web dyno)上运行?

    我在heroku 上部署了一个解析服务器 我正在解析服务器上运行一些云代码 该代码需要几分钟才能运行 并且在 Web dyno 上运行时会导致 Heroku 出现超时错误 heroku router at error code H12 de
  • Nodejs Express 隐式中间件应用于所有路由?

    我想知道 Express 是否允许我创建一个默认调用的路由中间件 而无需我将其明确放置在 app get arg 列表中 NodeJS 新手 var data title blah So I want to include this in
  • Heroku ENOENT:没有这样的文件或目录,stat '/app/build/index.html'

    我在 Heroku 中运行一个简单的测试站点时遇到问题 由于某种原因 当我希望它从 build 提供服务时 它试图从 app build 提供内容 错误 ENOENT 没有这样的文件或目录 stat app build index html
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • Sails.js - 如何更新嵌套模型

    attributes username type email validated by the ORM required true password type string required true profile firstname s
  • 以异步方式执行 Express res.render

    我有一个 Nodejs 应用程序 其中res renderExpress 方法以阻塞方式花费大约 400 毫秒 我如何处理它以非阻塞方式执行 我的 apache 基准测试需要 12 秒来执行大约 30 个并发请求 我如何以更好的方式实施这一
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • Node.JS async.parallel 不会等到所有任务完成

    我在用异步并行 https github com caolan async并行运行两个函数 这些函数请求 RSS 源 然后 RSS 提要被解析并添加到我的网页中 但由于某种原因async parallel运行回调方法而不等待两个函数完成 文
  • 动态更改温斯顿的日志级别

    我尝试在运行时实现日志级别更改 我一直在关注https github com yannvr Winston dynamic loglevel blob master test https github com yannvr Winston
  • Node 不断恢复到旧版本

    每次我在控制台中重新启动 vagrant 时 它都会询问我的登录详细信息 然后说Now using node v7 10 0 npm v4 2 0 当我做run nvm install node I get v13 11 0 is alre
  • 函数不会等到 Promise 得到解决

    我正在开发一个简单的不和谐机器人 我正在尝试打印有关某个玩家的一些一般数据 我最近了解了 async await 并尝试将其实现到我的代码中 然而 它似乎不起作用 因为当我第一次触发此代码时 它会打印 null 但在后续触发时 它将打印正确
  • Node.js 中的 PHP exit()/die() 等价物是什么

    什么是 PHP die http www php net manual de function die php http www php net manual de function die php 在 Node js 中等效吗 https
  • 未捕获的 ReferenceError:未定义角度 - Mean.IO

    我已遵循安装步骤 http mean io docsmean io 但是当我浏览 localhost 3000 时 我得到一个空白页面 当我打开控制台时 我得到一个指向相同错误的文件列表 未捕获的引用错误 角度未定义 我的问题是类似的to
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • GraphQL 预期可迭代,但未找到字段 xxx.yyy 的迭代

    我目前正在尝试使用 NodeJS 进行 GraphQL 但我不知道为什么以下查询会出现此错误 library name user name email 我不确定是否type of my resolveLibrary是对的 因为在任何例子中我
  • 构建:找不到“节点”的类型定义文件

    VS 2015 社区版 在家 npm 3 10 Angular 2 我试图在 ASP Net MVC 5 应用程序中获取 Angular2 设置 我开始使用的模板使用旧版本的 Angular 因此我更新了包引用 当我构建时 列表中的第一个错
  • Nodejs - 检查隐藏文件

    我正在迭代文件目录 想知道是否可以测试文件是否隐藏 目前 我只是检查文件是否以 开头或不 这适用于 Mac 也许还有 Linux 但是 我想知道如何在 Windows 上做到这一点 另外 句点会在所有版本的 Linux 中隐藏该文件吗 Th
  • npm install -g expo-cli 失败并显示“EPERM:不允许操作,取消链接 '...\adb.exe'

    我在运行时收到错误 npm install g expo cli 我尝试以管理员身份重新安装节点模块 但出现相同的错误 环境 Windows 10 节点版本 10 15 3 NPM版本 6 9 0 我预计安装会发生 但出现了这样的错误 np
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch

随机推荐

  • 使用 Dojo 设置 元素的值/文本

    我正在开发一个秒表应用程序 试图学习 Dojo Toolkit 因此 首先 我需要将小时 分钟 秒和毫秒设置为 0 I tried dojo byId hours value 00 还尝试过 domAttr set hours 00 它不起
  • 使用 webpack 编译 less

    我想添加一个非常基本的 less 文件到我的project https github com pbrianmackey uiexperiment在 github 上 参见这次提交 https github com pbrianmackey
  • 如何使用expressJS提供ReactJS静态文件?

    问题 我已成功提供 React 应用程序的 index html 文件 但是index js取代
  • 从存在缺失值的现有列创建新列

    我正在尝试根据这两列创建一个新列 假设我想创建一个新列 z 当 y 不丢失时 它应该是 y 的值 当 y 确实丢失时 它应该是 x 的值 所以在这种情况下 我期望 z 是 1 8 10 8 x y 0 1 NaN 1 2 8 2 4 10
  • Sympy:化简平方根

    Sympy 似乎无法简化涉及变量平方的平方根的表达式 In 28 a x 2 In 29 b a 1 2 In 30 b Out 30 0 5 2 x In 31 b simplify Out 31 0 5 2 x 我无法将此与其他变体一起
  • 使用 PHP 7.2.4 的 Ubuntu 16.04 上缺少 PDO 驱动程序

    我想在Kubuntu 16 04上尝试最新版本的PHP 从那时起 我似乎无法将pdo与mysql一起使用 当我启动 php 时 出现以下警告 PHP Warning PHP Startup Unable to load dynamic li
  • 从 s3 读取文件时 joblib.load 出错

    当尝试从 s3 读取文件时joblib load 我收到错误ValueError embedded null byte当尝试读取文件时 这些文件是由 joblib 创建的 并且可以从本地副本 在上传到 s3 之前在本地制作 成功加载 因此错
  • 在 Backbone 中进行视图混合的正确方法

    我一直扩展基本主干视图 并且每个部分都有一个基本视图 以便我可以在多个级别上扩展 我的问题是 执行视图混合的最有效方法是什么 可以混合到任何视图中的可重用视图部分 例如 var BaseProfile Backbone View exten
  • Yahoo Pipes:根据文本文件中的单词过滤提要中的项目

    我有一个管道 可以过滤 RSS 提要并删除任何包含我选择的 停用词 的项目 目前 我已经在管道编辑器中为每个停用词手动创建了一个过滤器 但更合乎逻辑的方法是从文件中读取它们 我已经弄清楚如何从文本文件中读取停用词 但是如何将过滤器运算符应用
  • ReCaptcha 在 iPhone 上无法正常工作

    我有一个带有简单联系表格的网站 验证有点少 因为它不进入数据库 只是一封电子邮件 该表格的工作原理如下 有 5 个字段 其中 4 个为必填字段 提交将被禁用 直到 4 个字段有效 然后您才能提交 然后 所有内容都会在服务器上再次验证 包括验
  • Hibernate 完全支持 SQLite 吗?

    Jboss Hibernate 中没有提及对 SQLite 的支持its wiki https community jboss org wiki SupportedDatabases2 Stack Overflow 帖子中也提到了同样的内容
  • ggplot2刻度填充梯度与离散上限

    我正在寻找价值热图 我希望热图从表示低值的蓝色 示例代码中的 0 变为表示高值的绿色 示例代码中的 75 但是 数据包含大于 75 的值 我希望任何大于 75 的值都用红色填充 总而言之 我希望填充从 0 到 75 蓝色 到绿色 绿色 任何
  • 如何将es6语法添加到atom编辑器

    我曾经使用 sublime text 但现在想使用atom io 编辑器 我有这些代码行 error Missing semicolon import React Component from react export default cl
  • 根据 Java 编码标准进行异常处理

    我有一个关于异常处理情况下的java标准的查询 代码片段 public String methodXXX This method may throw IllegalArgumentexception and arrayoutofbounda
  • 用 C++ 解释 2D 线段/四叉树 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 附 这可能不是重复的 我进行了搜索 并确保我没有得到我想要的东西 我是一名 ACM 问题解决者 最近我学习了线性数组的线段树和具有延迟传播的
  • 如何使用 CMake 和 Visual Studio 设置路径环境变量来运行测试

    我正在使用 CMake 生成 Visual Studio 项目文件 我想在设置 PATH 环境变量后运行测试可执行文件 以便它能够加载所需的 dll 我尝试按照讨论http www mail archive com 电子邮件受保护 msg2
  • 如何才能有一个永久状态行显示当前文件的名称?

    我总是忘记我正在编辑哪个文件 In Vim 7 x how can I have a permanent status bar at the bottom like what is displayed when I press Ctrl G
  • 托管爬虫的最佳解决方案? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个爬虫 可以爬行几个不同的域以获取新帖子 内容 内容总量数十万页 并且每天都有大量新内容添加 因此
  • 如何在猫头鹰轮播项目之间添加空格

    如何在猫头鹰项目之间添加空间 在项目之间添加边距或填充 这需要响应式 我可以在 jquery 中添加一些装订线吗 function newsCarousel carousel owlCarousel items 4 itemsCustom
  • 如何判断读取dir是否完成

    每个人 我正在使用 node webkit 开发某种图像视图应用程序 我创建了一个函数来读取给定位置内的目录并搜索图像文件 jpg 和 png 我使用的代码如下 app js var fs require fs var gui requir