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中的异步编程相关推荐

  1. 深入理解nodejs中的异步编程

    文章目录 简介 同步异步和阻塞非阻塞 javascript中的回调 回调函数的错误处理 回调地狱 ES6中的Promise 什么是Promise Promise的特点 Promise的优点 Promi ...

  2. NodeJS中的异步编程经验

    问题引入:今天在 Gulp 构建任务中出现一个 html 解析错误,但是并没有报错,也没有中断 gulp 构建任务的执行,而是出现 UnhandledPromiseRejectionWarning 的 ...

  3. 一文说通C#中的异步编程补遗

    前文写了关于C#中的异步编程.后台有无数人在讨论,很多人把异步和多线程混了. 文章在这儿:一文说通C#中的异步编程 所以,本文从体系的角度,再写一下这个异步编程.   一.C#中的异步编程演变 1. ...

  4. 一文说通C#中的异步编程

    天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章.   一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...

  5. 【转】.Net中的异步编程总结

    一直以来很想梳理下我在开发过程中使用异步编程的心得和体会,但是由于我是APM异步编程模式的死忠,当TAP模式和TPL模式出现的时候我并未真正的去接纳这两种模式,所以导致我一直没有花太多心思去整理这两部 ...

  6. 了解和使用DotNetCore和Blazor中的异步编程

    目录 介绍 您对异步编程了解什么? 那么,什么是异步编程? 我们什么时候应该使用它? 任务.线程.计划.上下文 到底是怎么回事? Asnyc编码模式 命名约定 异步任务模式 任务模式 事件模式 阻塞与 ...

  7. .NET中的异步编程——常见的错误和最佳实践

    目录 背景 async void 没有线程 Foreach和属性 始终异步 在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章中,我们开始分析.NET世界中的 ...

  8. C#中的异步编程(Async)

    文章目录 C#中的异步编程(Async) 前言 示例代码 C#中的异步编程(Async) 前言 所谓的异步,就是指代码在运行的过程中,不会发生阻塞,例如我们玩游戏的时候,游戏在下载资源或者在加载本地资 ...

  9. Node.js中的异步编程,个人理解及分化讲解

    Nodejs Nodejs本身是单线程的,底层核心库是Google开发的V8引擎,而主要负责实现Nodejs的异步功能的是一个叫做libuv的开源库,github上可以找到它. 异步编程 Nodejs ...

最新文章

  1. php引用php,PHP7引入的??和?:的区别讲解
  2. js代码实现购物车效果
  3. filter-mutate过滤插件
  4. Java字符串替换(replace)
  5. NTKO Office乱码问题
  6. AD18等长线、蛇形线的设置
  7. pr双击打开图标没反应,下载ZXPSignLib-minimal.dll替换
  8. java获取局域网所有ip_java如何获取局域网内全部IP?
  9. c语言程序设计马秀丽课后题答案,c语言程序设计课后题答案马秀丽
  10. 2018 qs计算机排名,2018年QS世界大学学科排名公布 强势围观
  11. 如何用计算机制作海报,稿定设计如何制作海报 一键生成海报的方法
  12. 西游降魔之东去的西游
  13. 对象存储基本知识介绍
  14. TP、TN、FP、FN 含义
  15. ps里面怎么插入流程图_用PS怎么画流程图?
  16. 4.2 热储存与冷储存
  17. 基于stm32cubeMX的stm32串口输出的Protues仿真
  18. 速度规划(梯形、余弦、多项式、7段S型、7段修正S型、15段S型、31段S型)
  19. Authorware安装后的显示图标无法显示
  20. 基于mysql的校园二手平台_基于java的校园二手交易网站mysql

热门文章

  1. Photoshop图层学习总结
  2. 虚拟机Ubuntu18.04 root下 连接 windows 中 winScp
  3. 提前祝大家十一中秋节快乐
  4. python3.8学习_python3.8.1 入门基础学习 之 【字典】 学习
  5. python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...
  6. 计算机七个计算原理,计算机组成原理计算题(7页)-原创力文档
  7. android studio gradle 国内代理
  8. 2017浙江省赛 B - Problem Preparation ZOJ - 3959
  9. C#中DataTable中的Compute方法使用收集
  10. JavaScript函数 this调用规则