当前位置: 首页 > news >正文

同步和异步promise

进程和线程

  • 进程(厂房):程序的运行环境

  • 线程(工人):进行运算的东西

同步和异步

  • 同步:一件事干完才去干下一件事,前面的代码不执行,后面的代码也不执行。同步的代码可能会出现阻塞情况。

Java 和 pathon 中都是通过多线程解决阻塞。

node.js通过异步解决

  • 异步:一段代码的执行不会影响到其他代码。

console.log("11111111");
function sum(a, b, cb) {setTimeout(() => {cb(a + b);});
}
sum(123, 456, (result) => {console.log(result);
});
console.log("22222222");

异步相加的结果上再加 777

console.log("11111111");
function sum(a, b, cb) {setTimeout(() => {cb(a + b);});
}
sum(123, 456, (result) => {sum(result, 777, (result) => {console.log(result);});
});
console.log("22222222");

上述代码可以看出,出现了回调地狱,可读性差、代码调试不方便。

解决问题:需要一个东西,代替回调函数返回结果。

promise

异步必须通过回调函数来返回结果。promise 是用来存储数据的容器,可以存储异步调用的结果。

promise解决回调地狱

// 错误的示例,写了一个promise的回调地狱
function sum(a, b) {return new Promise((resolve, reject) => {setTimeout((a, b) => {resolve(a + b);});});
}sum(123, 456).then((result) => {sum(result, 7).then((result) => {sum(result, 8).then((result) => {console.log(result);});});
});

promise.then() 返回值也是一个 promise 对象,所以可以有 promise.then().then() 的形式

promise 的链式调用:

sum(123, 456).then((result) => {return result + 7;}).then((result) => {    // 来自上一个 result + 7return result + 8;}).then((result) => {    // 来自上一个 result + 8return result + 9;}).then((result) => {    // 来自上一个 result + 9console.log(result);});

http://www.lryc.cn/news/19897.html

相关文章:

  • CHATGPT是新的“搜索引擎终结者”吗?百度是否慌了
  • 力扣-订单最多的客户
  • MyBatis学习笔记(六) —— MyBatis的各种查询功能
  • 2023年最新详细教程!手把手教你搭建Hexo + GitLab个人博客
  • centos7安装
  • java String类(超详细,含常用方法、面试题,内存图,案例)
  • 哈希表以及哈希冲突
  • 测试——基本概念
  • SnowFlake 雪花算法和原理(分布式 id 生成算法)
  • 【死磕数据库专栏】MySQL对数据库增删改查的基本操作
  • 阿里软件测试二面:adb 连接 Android 手机的两种方式,看完你就懂了
  • Docker安装YApi
  • springboot自定义参数解析器
  • Python Unittest ddt数据驱动
  • Vue自定义组件遇到分页传输数据不正确解决办法
  • ABAP 辨析CO|CN|CA|NA|CS|NS|CP|NP
  • RK3568平台开发系列讲解(设备驱动篇)Pinctrl子系统详解
  • ROS小车研究笔记:二维SLAM建图简介与源码分析
  • 番外9:使用ADS对射频功率放大器进行非线性测试1(以IMD3测试为例)
  • 车载软件背景(留坑)
  • Hadoop-MapReduce
  • ChatGPT来了,软件测试工程师距离失业还远吗?
  • 【项目实战】Linux服务管理 之 开启/关闭防火墙
  • OSS存储使用之centOS系统ossfs挂载
  • 【项目实战】SpringBoot多环境(dev、test、prod)配置
  • Laravel框架01:composer和Laravel简介
  • 【bug】Transformer输出张量的值全部相同?!
  • 【LeetCode】剑指 Offer(8)
  • 安装MySQL数据库
  • 手写Android性能监测工具,支持Fps/流量/内存/启动等