node异步进阶系列文章:
node异步进阶(1)-- 回调函数经典写法
node异步进阶(2)-- Promise的连续then写法
node异步进阶(3)-- async写法
继续上回的任务,这次使用全宇宙最新最
炫酷的写法 async ,await
第五版(串行)
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if (req.url=='/') {
getTitles(res);
}
}).listen(80,function(){
console.log('server start..');
});
async function getTitles(res){
try{
var titles = await get_file_content('/tpl/title.json').then(JSON.parse);
var tmpl = await get_file_content('/tpl/template.html');
formatHtml(titles,tmpl, res);
} catch(err) {
hadError(err, res); // 调用处理错误的函数。
};
}
// 这是通用函数,异步读文件
function get_file_content(file)
{
return new Promise(function (resolve, reject) {
fs.readFile(__dirname+file, function(err,data){
if (err) {
reject(err);
} else {
resolve(data.toString() );
}
});
});
}
//这是本程序主要逻辑,模板替换后,输出
function formatHtml(titles,tmpl, res) {
var html = tmpl.replace('%', ' <li > ' +titles.join('</li > <li >') +' </li > ' );
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end(html);
}
// 通用的错误处理函数
function hadError(err, res) {
console.log(err);
res.end('server error.');
}
可以看出,相比前面4个版本,这个版本的代码最清爽,大赞node。
特别需要提醒注意的是:
这种写法要求node的版本较新,我的是node8.9,windows系统是我爱用的。
同样,本任务更适合并发请求文件,所以下面给出并发的版本
第六版(并发)
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if (req.url=='/') {
getTitles(res);
}
}).listen(80,function(){
console.log('server start..');
});
async function getTitles(res){
try{
let [titles, tmpl] = await Promise.all([
get_file_content('/tpl/title.json').then(JSON.parse),
get_file_content('/tpl/template.html')
]);
formatHtml(titles,tmpl, res);
} catch(err) {
hadError(err, res); // 调用处理错误的函数。
};
}
// 这是通用函数,异步读文件
function get_file_content(file)
{
return new Promise(function (resolve, reject) {
fs.readFile(__dirname+file, function(err,data){
if (err) {
reject(err);
} else {
resolve(data.toString() );
}
});
});
}
//这是本程序主要逻辑,模板替换后,输出
function formatHtml(titles,tmpl, res) {
var html = tmpl.replace('%', ' <li > ' +titles.join('</li > <li >') +' </li > ' );
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end(html);
}
// 通用的错误处理函数
function hadError(err, res) {
console.log(err);
res.end('server error.');
}
分享到:
相关推荐
这使得异步代码更接近同步的写法,提高了可读性。配合yield*和co库,Generator可以方便地驱动Promise链。 4. async/await:这是ES7引入的新特性,基于Promise,使得异步代码更加简洁和易读。async函数总是返回一个...
这里的ES6 Promise和ES7 async/await是JavaScript中处理异步操作的两种方式,Promise用于链式处理异步操作,而async/await则提供了一种更接近同步代码的写法,使代码更易读和维护。Babel是一个广泛使用的工具,它...
4. 更强大的异步处理:Node.js 8.x引入了async/await语法,这是基于Promise的异步编程的一种更简洁的写法,可以有效避免回调地狱,提高代码可读性。 5. npm 5.6.0改进:此版本的npm提供了更快的安装速度、更好的...
在本文中,我们将深入探讨Node.js异步处理的几种常见方法,包括回调函数、事件驱动以及基于Promise和async/await的现代异步编程模式。 首先,我们来看**回调函数**。这是Node.js早期处理异步操作的主要方式。例如,...
2. **JavaScript 编程**:掌握 JavaScript 的基本语法,包括变量、函数、数组、对象等,并理解异步编程的概念,如回调函数、Promise 和 async/await。 3. **网络请求**:通过 Node.js 发送 HTTP 请求,可能使用到第...
"babel-preset-stage-3": "^6.5.0", "babel-plugin-add-module-exports": "^0.1.2", Features if use node v7.x,runkoa is an alias with node --harmony-async-await 不需要了解babel即可使用koa2+async组合 对koa...
例如,`async/await`语法使得异步代码更接近同步的写法,提高了代码的可读性和可维护性。 Python中,可以使用`asyncio`库进行异步编程。`async`和`await`关键字与JavaScript类似,定义异步函数和等待异步操作。此外...
在JavaScript的世界,异步编程是不可或缺的一部分,尤其是在Node.js环境中,由于其单线程特性,异步处理显得尤为重要。Express作为Node.js中最受欢迎的Web服务器框架之一,自然而然地需要面对和处理各种异步操作。...
Node.js异步编程是利用JavaScript的异步编程能力,处理在服务器端可能出现的大量I/O操作而不阻塞执行线程的技术。在Node.js环境中,由于其单线程的特性,异步编程尤为重要,它使得程序能够以非阻塞的方式执行I/O操作...
// 使用amocha的async/await写法 it('测试异步操作', async () => { const result = await someAsyncFunction(); expect(result).toBe('expected value'); }); ``` **3. 安装与使用** 要在项目中使用`amocha`,...
- Promise和async/await:用于异步编程,解决回调地狱问题。 - fetch API:现代浏览器的异步请求方法,返回Promise。 8. **闭包** - 闭包的概念和作用,以及如何创建闭包。 - 闭包在内存管理中的作用,防止内存...
async/await则是基于Promise的一种更优雅的写法,它允许我们使用类似同步代码的方式来编写异步逻辑,提高了代码的可读性和可维护性。 在Node.js中,常见的异步I/O操作包括文件系统操作(fs模块)、网络通信(http或...
理解回调函数、Promise、async/await的用法,能够更好地处理异步操作,避免回调地狱。 8. **模块化**:随着项目复杂度增加,模块化变得尤为重要。学习CommonJS(Node.js环境)和ES6的import/export语法,以及模块...
- **async/await**:基于Promise的进一步抽象,使得异步代码更接近于同步代码的写法。 #### 7. AJAX - **概念**:异步JavaScript和XML,一种无需重新加载整个网页即可更新部分网页的技术。 - **实现方式**:通过...
- async/await:基于Promise的语法糖,使得异步代码更接近同步写法,提高了可读性。 7. **ES6及以后的新特性** - 类与继承:ES6引入了类的语法糖,以及基于prototype的继承机制。 - 解构赋值:方便地从数组或...
这种方式更加接近同步代码的写法,让异步代码看起来就像同步执行一样,降低了理解和调试的难度。 总的来说,`es6-promisify-all` 是前端开发中处理异步操作的一个实用工具,它使得开发者能够更好地利用 ES6 的 ...