node.js异步编程的几种模式
Node.js异步编程的几种模式
以读取文件为例:
1.callback function
const fs = require('fs');
//callback function
fs.readFile('package.json',(val,err) => {
if(err) throw err;
console.log(val);
});
2.Promise对象
//promise
let fs_promise = function(file){
return new Promise((resolve,reject)=>{
fs.readFile(file,(val,err) => {
if(err) reject(err);
resolve(val);
});
});
};
fs_promise('package.json')
.then((data) => console.log(data));
3.Generator函数 + Promise对象
//Generator + promise
function* gen(file){
return yield fs_promise(file);
}
let g = gen('package.json');
g.next();
4.Generator函数 + Promise对象 + co函数库
//Generator + promise + co
const co = require('co');
co(gen('package.json'));
5. Generator函数 + Thunk函数 + co函数库
//Generator + thunk + co
let fs_thunk = function(file){
return function(callback){
return fs.readFile(file,callback);
}
};
function* gen(file){
let f1 = yield fs_thunk(file);
console.log(f1.toString());
}
const co = require('co');
co(gen('package.json'));
6. async/await
//async + await NOT SUPPORT YET
async function readFileAsync(file){
return await fs.readFile(file);
}
readFileAsync('package.json');
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库