nodeJS中的异步编程
nodejs 不是单线程 在博客项目中关于异步问题:
1.当用户添加一条博客时 需要通过post方式向服务器发送数据 后台获取用户以post方式拿到传送过来的数据 然后存入数据库:
上面的代码:创建一个空字符串 当用户向服务器发送请求时出发data事件将依次获取来数据进行拼接 当用户请求结束后出发end事件 将拼接后的字符串赋值给req.postData属性 理想中的代码执行顺序如下:
但是代码中的data和end事件 都是属于异步 SO 真正执行如下:
因为同步代码优先执行 异步代码等同步代码之行结束后再根据规则执行 这就造成后台接收不到传送的数据
使用Promise解决异步问题:将异步代码放入Promise中 将要传送的数据放到resolve方法中作为参数
当上面代码执行完成后才执行下面的then里面的代码 同时也回想resolve中的参数传到下面的形参result中 在将其赋值给req.postData 将后续代码放在then中
2.当nodeJS操作数据库时也存在异步:
var mysql = require('mysql');
var connection = mysql.createConnection({host: 'localhost',user: 'root',password: 'root',database: 'nodeblog'
});//开始连接
connection.connect();//查询所有数据
let sql = 'SELECT * FROM student'
connection.query(sql, (err, result) => {if (err) {console.log('sorry');return;}console.log(result);
});console.log('查询结束')
上面代码的执行结果为:
说明:虽然查询学生表的代码书写在前 但是优先输出“查询结束”可见后续代码不会等到查询学生表代码执行结束后才执行
解决方法:也是通过Promise
红色框内为异步代码 黄色框内为后续代码!!!
3.使用Promise实现依次读取文件:
/**依次读取文件*///拿到abc三个文件的路径 使用绝对路径
const path = require('path')
const fs = require('fs')
let a = path.join(__dirname, '文件', 'a.txt')
let b = path.join(__dirname, '文件', 'b.txt')
let c = path.join(__dirname, '文件', 'c.txt')let read = path => {return new Promise((resolve, reject) => {fs.readFile(path, 'utf8', (err,data) => {resolve(data)})})
}read(a).then(data => {console.log(data)return read(b)
}).then(data => {console.log(data)return read(c)
}).then(data => {console.log(data)
})
OK
nodeJS中的异步编程相关推荐
- 深入理解nodejs中的异步编程
文章目录 简介 同步异步和阻塞非阻塞 javascript中的回调 回调函数的错误处理 回调地狱 ES6中的Promise 什么是Promise Promise的特点 Promise的优点 Promi ...
- NodeJS中的异步编程经验
问题引入:今天在 Gulp 构建任务中出现一个 html 解析错误,但是并没有报错,也没有中断 gulp 构建任务的执行,而是出现 UnhandledPromiseRejectionWarning 的 ...
- 一文说通C#中的异步编程补遗
前文写了关于C#中的异步编程.后台有无数人在讨论,很多人把异步和多线程混了. 文章在这儿:一文说通C#中的异步编程 所以,本文从体系的角度,再写一下这个异步编程. 一.C#中的异步编程演变 1. ...
- 一文说通C#中的异步编程
天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章. 一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...
- 【转】.Net中的异步编程总结
一直以来很想梳理下我在开发过程中使用异步编程的心得和体会,但是由于我是APM异步编程模式的死忠,当TAP模式和TPL模式出现的时候我并未真正的去接纳这两种模式,所以导致我一直没有花太多心思去整理这两部 ...
- 了解和使用DotNetCore和Blazor中的异步编程
目录 介绍 您对异步编程了解什么? 那么,什么是异步编程? 我们什么时候应该使用它? 任务.线程.计划.上下文 到底是怎么回事? Asnyc编码模式 命名约定 异步任务模式 任务模式 事件模式 阻塞与 ...
- .NET中的异步编程——常见的错误和最佳实践
目录 背景 async void 没有线程 Foreach和属性 始终异步 在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章中,我们开始分析.NET世界中的 ...
- C#中的异步编程(Async)
文章目录 C#中的异步编程(Async) 前言 示例代码 C#中的异步编程(Async) 前言 所谓的异步,就是指代码在运行的过程中,不会发生阻塞,例如我们玩游戏的时候,游戏在下载资源或者在加载本地资 ...
- Node.js中的异步编程,个人理解及分化讲解
Nodejs Nodejs本身是单线程的,底层核心库是Google开发的V8引擎,而主要负责实现Nodejs的异步功能的是一个叫做libuv的开源库,github上可以找到它. 异步编程 Nodejs ...
最新文章
- php引用php,PHP7引入的??和?:的区别讲解
- js代码实现购物车效果
- filter-mutate过滤插件
- Java字符串替换(replace)
- NTKO Office乱码问题
- AD18等长线、蛇形线的设置
- pr双击打开图标没反应,下载ZXPSignLib-minimal.dll替换
- java获取局域网所有ip_java如何获取局域网内全部IP?
- c语言程序设计马秀丽课后题答案,c语言程序设计课后题答案马秀丽
- 2018 qs计算机排名,2018年QS世界大学学科排名公布 强势围观
- 如何用计算机制作海报,稿定设计如何制作海报 一键生成海报的方法
- 西游降魔之东去的西游
- 对象存储基本知识介绍
- TP、TN、FP、FN 含义
- ps里面怎么插入流程图_用PS怎么画流程图?
- 4.2 热储存与冷储存
- 基于stm32cubeMX的stm32串口输出的Protues仿真
- 速度规划(梯形、余弦、多项式、7段S型、7段修正S型、15段S型、31段S型)
- Authorware安装后的显示图标无法显示
- 基于mysql的校园二手平台_基于java的校园二手交易网站mysql
热门文章
- Photoshop图层学习总结
- 虚拟机Ubuntu18.04 root下 连接 windows 中 winScp
- 提前祝大家十一中秋节快乐
- python3.8学习_python3.8.1 入门基础学习 之 【字典】 学习
- python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...
- 计算机七个计算原理,计算机组成原理计算题(7页)-原创力文档
- android studio gradle 国内代理
- 2017浙江省赛 B - Problem Preparation ZOJ - 3959
- C#中DataTable中的Compute方法使用收集
- JavaScript函数 this调用规则