nodejs去异步解决方案总结

本文探讨了Node.js中的异步处理方法,包括方法嵌套、递归调用、类库调用、子线程及Promise的使用。同时,介绍了如何利用Node.js进行文件下载和断点续传,为开发者提供了实用的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识nodeJs,填坑(一)去异步(同步化)

序言

本人是java程序员,应公司业务需要开发,用nodejs+electron+vue开发一个桌面应用,主要功能是从服务器上http远程访问下载到本地,做离线case开发。类似于手机里面的应用市场。管理离线应用正在下载、下载中。废话不多说,讲讲我一个菜鸟在nodejs 遇到的问题以及解决思路。

nodejs 去异步

nodejs对于我从零开始,好 网上百度浏览网站自学,查api,看例子。其实nodejs没有什么很神奇,语法就是js。加上引用一些模块,类似java引用jar包。但是一开始我就掉进了nodejs最大特性的坑中—nodejs是异步执行的。每次一个方法没有执行完就会执行下一个语句。这处理起来很麻烦。总结:node的去异步方式主要有三种:方法嵌套,递归调用,调用类库。 其实不然,还有两种:子线程child_process、Es6 Promise。

  1. 方法嵌套、递归调用 大家可以参照链接https://blog.youkuaiyun.com/whjcsdnwhj/article/details/78705070,本人未用,感觉繁琐;
  2. 调用类库 常用的Step Async,用Async就好。
      async function xx(){
     	 // 同步块方法前添加 await
    	await function xxx();
     }
    
  3. 使用nodejs的child_process模块可以实现多进程任务。利用child_process可以创建子进程,实现子进程和主进程之间的通信。
    	异步创建:
    	    child_process.spawn(command[, args][, options])
    	    options.stdio
    	    options.detached
    	    options.customFds
    	    child_process.exec(command[, options], callback)
    	    child_process.execFile(file[, args][, options][callback])
    	    child_process.fork(modulePath[, args][, options])
    	同步创建:
    	    child_process.spawnSync(command[, args][, options])
    	    child_process.execFileSync(command[, args][, options])
    	    child_process.execSync(command[, options])
    
  4. 利用 new Promise 实例化然后then处理控制同步,同时解决了异常处理;
    	// 1 有A B 方法,B必须在A执行完才开始执行,示例如下
       function Main(){
       	//.........
       	var p = A();
       		p.then(function(values){
       			//这是成功返回 
       			B();
       		},function(resason){
       			//这是失败返回
       			B();
       		});
       }
       function A(){
       	return new Promise(function(resovle,reject){
       		resolve(values);//成功返回
       		reject(resason);//失败返回
       	});
       }
       function B(){
       //...........
       }
       // 2 有A1 A2 A3 B 方法,B必须在A1 A2 A3执行完才开始执行,示例如下
       function Main(){
       	//.........
       	let arrs = [];
       	arrs.push(A1());
       	arrs.push(A2());
       	arrs.push(A3());
       	var p = Promise.all(arrs);
       		p.then(function(values){
       			//这是所有resovle成功返回 
       			B();
       		},function(resason){
       			//只要有一个reject失败返回
       			B();
       		});
       }
    

文件下载,断点续传

下篇介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值