09-Node.js学习笔记-异步编程
同步API,异步API
同步API:只有当前API执行完成后,才能继续执行下一个API
```
console.log('before');
console.log('after');
```
异步API:当前API的执行不会阻塞后续代码的执行
```
console.log('before');
setTimeout(function(){
console.log('last')
},2000)
console.log('after');
```
同步API,异步API的区别(获取返回值)
同步API可以从返回值中拿到API执行的结果,但是异步API不可以的
回调函数
自己定义函数让别人去调用
```
function getData(callback){
callback()
}
getData(function(){
console.log('callback函数被调用了')
})
```
```
function getData(callback){
callback('糖糖糖')
}
getData(function(n){
console.log('callback函数被调用了')
console.log(n)
})
```
```
function getMsg(callback){
setTimeout(function(){
callback({
msg:'hello node.js'
})
},2000)
}
getMsg(function(data){
console.log(data)
})
```
同步API,异步API的区别(代码执行顺序)
同步API从上到下依次执行,前面代码会阻塞后面代码的执行
异步API不会等待API执行完成后再向下执行代码
Promise
Promise 出现的目的是解决Node.js异步编程中回调地狱的问题
```
let promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
if(true){
resolve({name:'林一一'})
}else{
reject('失败了')
}
},2000);
});
promise.then(result=>console.log(result);//{name:'林一一'})
.catch(error=>console.log(error);//失败了)
```
```
//回调地狱
const fs = require('fs');
fs.readFile('./1.txt','utf8',(err,result1)=>{
console.log(result1)
fs.readFile('./2.txt','utf8',(err,result2)=>{
console.log(result2)
fs.readFile('./3.txt','utf8',(err,result3)=>{
console.log(result3)
})
})
})
//promise解决回调地狱
const fs = require('fs');
function p1(){
return new Promise((resolve,reject)=>{
fs.readFile('./1.txt','utf8',(err,result)=>{
resolve(result);
})
})
}
function p2(){
return new Promise((resolve,reject)=>{
fs.readFile('./2.txt','utf8',(err,result)=>{
resolve(result);
})
})
}
function p3(){
return new Promise((resolve,reject)=>{
fs.readFile('./3.txt','utf8',(err,result)=>{
resolve(result);
})
})
}
p1().then((r1)=>{
console.log(r1)
return p2()
}).then((r2)=>{
console.log(r2)
return p3()
}).then((r3)=>{
console.log(r3)
})
const fs = require('fs');
let promise = new Promise((resolve,reject)=>{
fs.readFile('./100.txt','utf8',(err,result)=>{
if(err !=null){
reject(err);
}else{
resolve(result);
}
})
})
promise.then((result)=>{
console.log(result);
}).catch((err)=>{
console.log(err)
})
09-Node.js学习笔记-异步编程的更多相关文章
- Node.js学习笔记(2):基本模块
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- Node.js学习笔记(4):Yarn简明教程
Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...
- Node.js学习笔记(1) - Node.js简介
近期在看一些Node.js的知识,看完后觉得,一些前面的东西忘记了,于是整理一下,方便自己查阅,也希望对学习Node.js的朋友有些帮助: 当然以下只是我个人的观点和理解,不喜勿喷,也望大神指教. 一 ...
- Node.js学习笔记(2)——关于异步编程风格
Node.js的异步编程风格是它的一大特点,在代码中就是体现在回调中. 首先是代码的顺序执行: function heavyCompute(n, callback) { var count = 0, ...
- Node.js学习笔记(六) --- Nodejs 的非阻塞 I/O、 异步、 事件驱动
1. Nodejs 的单线程 非阻塞 I/O 事件驱动在 Java. PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程.而每个线程需要耗费大约 2MB 内存.也就是说,理论 ...
随机推荐
- ESP8266调试(UDP调试)
1.设置STA模式 AT+CWMODE=1 2.加入热点 AT+CWJAP="Admin_name","password" 3.开启单路连接 AT+CIPMUX ...
- 大神带你一天了解zabbix(一)
第15章 Zabbix的搭建 15.1 为什么使用监控服务 对系统实现不间断的监控,实现报警通知(电话,微信,邮件,发短信,手环) 实时反馈系统当前的状态信息 保证服务的可靠安全性 保证业务的稳定运行 ...
- R语言计算IV值
更多大数据分析.建模等内容请关注公众号<bigdatamodeling> 在对变量分箱后,需要计算变量的重要性,IV是评估变量区分度或重要性的统计量之一,R语言计算IV值的代码如下: Ca ...
- socket AcceptAsync方法的使用
AcceptAsync与Accept很大的不一样 Accept是一个同步 阻塞的已经封装好底层的方法 AcceptAsync是一个异步 非阻塞未封装的底层连接入口,需要手动填入连接代码用于优化sock ...
- java发送邮件基础方法(另附部分主流邮箱服务器地址、端口及设置方法)
java发送邮件基础方法,可通过重载简化参数 import java.io.File; import java.io.UnsupportedEncodingException; import java ...
- 【JPA】映射
[JPA]映射 转载:https://www.cnblogs.com/yangchongxing/p/10120447.html 1.@Entity注解指定实体类 2.@Id注解指定实体主键 3.@T ...
- 一款 Postman 的开源替代品: Postwoman
1. 前言 大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用. 如果你连Postman都还没有用过,不 ...
- 数据库day01
作业: 1. 查看岗位是teacher的员工姓名.年龄 select name,age from staff_info where jobs = 'teacher'; 查看岗位是teacher且年龄大 ...
- Swoole协程与传统fpm同步模式比较
如果说数组是 PHP 的精髓,数组玩得不6的,根本不能算是会用PHP.那协程对于 Swoole 也是同理,不理解协程去用 Swoole,那就是在瞎用. 首先,Swoole 只能运行在命令行(Cli)模 ...
- C# 中的 bool、char 和 string 类型
上一篇(地址:https://www.vinanysoft.com/c-sharp-basics/data-types/fundamental-numeric-types/)只介绍了基本数值类型,本篇 ...