关于process.stdout和异步运行机制的问题
发布于 1年前 作者 yiwei1223 502 次浏览

各位社区的高手们!由于本人刚刚开始学习Node.js还不是很熟悉一些内部运行机制!最近写了一个小程序!具体的功能描述和代码如下贴出!基本的运行没有问题,但是总是重复输出一些东西,很是困惑!!!望解答!!! 问题描述在最后!!!! /**

  • 功能及步骤
  • 1.手动输入一个目录,程序自动定位到该目录
  • 2.根据输入文件名,在该目录下创建该文件
  • 3.输入内容,将输入的内容写入该文件 */

var fs = require(‘fs’), stdin = process.stdin, stdout = process.stdout, //获取输入的要定位的新目录 filepath = “"; stdout.write(" 请输入要定位的目录:”); stdin.resume(); stdin.setEncoding(‘utf-8’); stdin.on('data’, function (data) { //改变当前的工作目录 try { stdin.pause(); process.chdir(data.trim()); createfile(); } catch (err) { stdout.write(" 请输入要定位的目录:"); } });

/**

  • [[[[[[[[[[[[[[[[[@todo](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo) 创建文件 */ function createfile() { stdout.write(" 请输入文件名:"); stdin.resume(); stdin.setEncoding(‘utf-8’); stdin.on('data’, function (data) { stdin.pause(); filepath += data.toString(); writefile(filepath); }); };

/**

  • [[[[[[[[[[[[[[[[[@todo](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo)](/user/todo) 写文件 */ function writefile(filepath) { stdout.write(" 请输入要写的内容:"); stdin.resume(); stdin.setEncoding(‘utf-8’); stdin.on('data’, function (data) { fs.writeFile(filepath.trim(), data, function (err) { if(err) { console.log(“写入错误” + err); } else { console.log(‘保存成功!’);
    } }); }); }; 运行结果(模拟的一个终端): E:\nodejs\Demo\node.js学习\file-explorer\js>node writefile.js 请输入要定位的目录:e://nodejs 请输入文件名:yi.js 请输入要定位的目录: 请输入要写的内容:123344 请输入要定位的目录: 请输入要写的内容:保存成功! 问题:最后两行重复输出了!很困惑!!(如果不清楚可以运行一下!) 希望高手们可以解决!!!谢谢!!!
回到顶部