`

使用nodejs异步方法导致进程无法退出的问题

阅读更多

windows环境下使用nodejs开发了一个简单的网络蜘蛛,抓取网页中的图片。所以使用了http.get异步方法来下载指定的图片文件。多个图片的时候,http请求是串行发出的,下载完一个文件并生成本地文件以后再发起下一个http请求,等到最后一个图片下载完并生成本地文件以后,所有处理都结束了,按理说整个程序应该退出,但是有时候程序会停在那里,只有手动用CTL + C才能退出。试了很多种设计思路,但是问题仍然无法解决,最后强制调用了process.exit(0)才解决。

 不过这个问题不是一直出现,有的网站url一直出现,有的url一切正常,不知道是什么原因。

function getpic(){
 
 var f=fs.createWriteStream('./pic/' + j + ".jpg"); 
 
 var req = http.get(srcs[j-1],function(res)
 {
      res.on('data', function (chunk)
      {  
           f.write(chunk);
      });    
      res.on('end',function()
      {
           f.end();
           console.log(j+'.jpg OK!');
           if(j < srcs.length){
               ++j;
               getpic();
           }else{
                console.log('...download end...');
                process.exit(0);
           }
           return;
       }); 
      res.on('error',function(e){
          console.log(e.message);
      });
});
}

分享到:
评论
1 楼 di1984HIT 2014-09-01  
写的很好啊~~~

相关推荐

    Node.js-管理你NodeJS进程的生命周期

    `process.exitCode`属性可以设置退出码,`process.on('exit', callback)`可以在进程退出前执行回调函数。 七、模块化进程管理 在大型项目中,使用`cluster`模块可以实现进程间的负载均衡。`cluster`模块允许主进程...

    详解nodejs异步I/O和事件循环

    在 Node.js 中使用异步 I/O 的场景很常见,例如使用文件系统模块(fs)进行文件读写操作时,Node.js 提供了多种异步文件操作方法,比如 readFile() 和 writeFile()。这些函数不会阻塞主线程,它们会立即返回,同时在...

    NodeJS API参考手册

    退出钩子(AtExit hooks)是在Node.js进程退出前执行的回调函数。这可以用于清理资源或执行其他必要的操作。文档详细介绍了如何注册和使用退出钩子。 #### Assert断言模块 Assert模块是Node.js中的一个内置模块,...

    nodejs使用手册

    在Node.js中,`process`对象代表当前运行的进程,它提供了与操作系统交互的能力,例如接收命令行参数、监听信号、控制进程退出状态等。此外,`console`模块提供了类似于浏览器JavaScript的控制台输出功能,便于调试...

    nodejs基础入门及配置方法

    - `process.on('exit', function() {})` 监听进程退出事件。 #### Request 模块 1. **HTTP 请求:** - `request` 模块简化了 HTTP 请求处理过程。 #### Async 模块 1. **异步任务控制:** - `async` 模块提供...

    7天学会NodeJS.pdf

    `process`对象提供了与当前进程相关的属性和方法,如获取命令行参数、退出程序等。`child_process`模块则用于创建和管理子进程,子进程间可以通过IPC(Inter-Process Communication)进行通信。 【异步编程】 ...

    11课 NodeJS基础-第1天-{ 全局、核心对象、异步IO }.rar

    例如,我们常见的`process`对象就是`global`的一个属性,它提供了与Node.js进程交互的方法,如获取进程ID(`process.pid`),监听进程退出事件(`process.on('exit', callback)`)等。此外,Node.js中的`console`...

    12课 NodeJS基础-第1天-{ 全局、核心对象、异步IO }.rar

    例如,`process` 对象就是一个全局对象,提供了与当前 Node.js 进程交互的方法和属性,如进程ID(`process.pid`)和退出代码(`process.exitCode`)。 **核心对象** Node.js 提供了一系列核心模块,它们是预编译好...

    nodejs手册中文版.pdf

    - process.on('exit', callback):监听进程退出事件。 - process.on('uncaughtException', callback):监听未捕获异常事件。 5. util工具模块 Node.js的util模块提供了很多实用的方法和属性,方便开发者进行操作...

    nodejs中文文档.pdf

    **Global Objects** 包括Node.js环境中的一些全局变量和函数,如`process`对象,它提供了与Node.js进程交互的方法,比如获取进程ID、设置退出码、监听信号等。`global`对象则是所有全局变量的容器,尽管一般不推荐...

    nodejs中全局变量的实例解析

    // 注意:在进程退出后,大部分的异步操作不会执行 setTimeout(function() { console.log("该代码不会执行"); }, 0); console.log('退出码为:', code); }); console.log("程序执行结束"); ``` 在上面的代码...

    nodejsAPI中文版

    例如,process.env可以获取当前环境的环境变量,process.exit可以结束进程,并且可以传入退出状态码。 在Node.js中,error对象和错误处理机制是非常重要的,因为Node.js默认采用的是异步编程模式,错误处理不当很...

    Nodejs概述

    7. **退出nvm**: 使用`nvm deactivate`退出当前激活的Node.js版本。 #### 四、Node.js基本用法 1. **运行脚本**: 在命令行中使用`node script.js`运行JavaScript脚本。 2. **REPL环境**: - **进入REPL**: 直接...

    深入理解Nodejs Global 模块

    开发者可以通过process对象监听进程事件,比如`'exit'`事件,以便在程序退出前执行清理工作。 4. **console对象**:console对象提供了一组方法用于向标准输出(控制台)打印信息,如`console.log()`、`console....

    深入理解Node.js中的进程管理

    Node.js作为一款广泛使用的服务器端JavaScript运行环境,其设计之初就秉承了异步和事件驱动的原则,允许开发者构建轻量级的网络应用。在Node.js中,进程管理是进行性能优化和资源高效使用的重要方面。Node.js的进程...

    流程:全局替换nodejs流程

    - `process.exit(code)`: 强制进程退出,`code`参数表示退出状态码。 - `process.nextTick(callback)`: 在当前事件循环的结束时调用`callback`,常用于异步操作。 - `process.on('signal', callback)`: 注册信号...

Global site tag (gtag.js) - Google Analytics