当前位置: 首页 > 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);});

相关文章:

同步和异步promise

进程和线程进程(厂房):程序的运行环境线程(工人):进行运算的东西同步和异步同步:一件事干完才去干下一件事,前面的代码不执行,后面的代码也不执行。同步的代码可能会出现…...

CHATGPT是新的“搜索引擎终结者”吗?百度是否慌了

ChatGPT 以其非凡的自然语言处理 (NLP) 能力和清晰的响应风靡全球,有望带来一场重大的技术革命。在不知不觉中,叙事转向了ChatGPT与百度的对决,因为来自OpenAI的智能和健谈的聊天机器人已经慢慢获得了“潜在的百度终结…...

力扣-订单最多的客户

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:586. 订单最多的客户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总…...

MyBatis学习笔记(六) —— MyBatis的各种查询功能

6、MyBatis的各种查询功能 6.1、查询一个实体类对象 SelectMapper.java接口 /*** 根据用户id查询用户信息* param id* return*/ User getUserById(Param("id") int id);SelectMapper.xml <!--User getUserById(Param("id") int id)--> <selec…...

2023年最新详细教程!手把手教你搭建Hexo + GitLab个人博客

文章目录前言一、安装和配置环境1.安装 Git2.安装 Node.js二、新建博客项目1.GitLab配置CI/CD自动化部署1.1 GitLab新建项目1.2 GitLab自建Runners1.2.1 下载gitlab-runner1.2.2 注册Runners1.2.3 安装Runners并启动1.3 添加.gitlab-ci.yml文件2.拉取和推送hexo blog2.1 拉取he…...

centos7安装

centos7安装制作U盘启动盘下载镜像下载 UltralISO制作启动盘使用U盘安装系统修改模式为 UEFI调整BOOT option保存重启进入安装界面安装图形界面安装搜狗输入法制作U盘启动盘 下载镜像 去官网下载镜像&#xff0c;找到 mirrors链接&#xff08;速度快&#xff09; 选择一个中…...

java String类(超详细,含常用方法、面试题,内存图,案例)

String类一、String类的特点二、String 类的常见构造方法三、String常见的面试题1.字符串常量池2.String s "abc"与String s new String("abc")区别3.字符拼接4.常量优化机制四、String常用方法1. 比较字符串内容2. 遍历字符串3.截取字符串4.替换字符串5…...

哈希表以及哈希冲突

目录 哈希表 哈希冲突 1. 冲突发生 2. 比较常见的哈希函数 3. 负载因子调节(重点) 散列表的载荷因子概念 负载因子和冲突率的关系 冲突-解决-闭散列 线性探测 二次探测 冲突-解决-开散列 结尾 我们在前面讲解了TerrMap&#xff08;Set&#xff09;的底层是一个搜索…...

测试——基本概念

概念 测试和调试有以下几点区别&#xff1a; 测试是测试人员进行的工作&#xff0c;调试是开发人员调试是发现并解决问题&#xff0c;测试只是发现问题测试贯穿于整个项目的生命周期&#xff0c;而调试主要在编码阶段 测试人员一般有如下的工作&#xff1a; 需求分析&#x…...

SnowFlake 雪花算法和原理(分布式 id 生成算法)

一、概述 SnowFlake 算法&#xff1a;是 Twitter 开源的分布式 id 生成算法。核心思想&#xff1a;使用一个 64 bit 的 long 型的数字作为全局唯一 id。算法原理最高位是符号位&#xff0c;始终为0&#xff0c;不可用。41位的时间序列&#xff0c;精确到毫秒级&#xff0c;41位…...

【死磕数据库专栏】MySQL对数据库增删改查的基本操作

前言 本文是专栏【死磕数据库专栏】的第二篇文章&#xff0c;主要讲解MySQL语句最常用的增删改查操作。我一直觉得这个世界就是个程序&#xff0c;每天都在执行增删改查。 MySQL 中我们最常用的增删改查&#xff0c;对应SQL语句就是 insert 、delete、update、select&#xf…...

阿里软件测试二面:adb 连接 Android 手机的两种方式,看完你就懂了

前言 随着现在移动端技术的突飞猛进&#xff0c;导致现在市场上&#xff0c;APP 应用数不胜数&#xff0c;那对于测试工程师而言&#xff0c;对于 APP 的测试&#xff0c;那基本就是一个必修课了。 今天&#xff0c;我就来给大家介绍一下&#xff0c;adb 连接 Android 手机的两…...

Docker安装YApi

目录0、Docker 环境准备1、数据库准备 MongoDB2、启动 YAPI3、官网教程0、Docker 环境准备 Docker 容器之间网络互通需要使用 docker network create yapi 创建一个自定义网络 docker network create yapi1、数据库准备 MongoDB YAPI 的数据库是 MongoDB&#xff0c;准备镜像…...

springboot自定义参数解析器

为什么要自定义参数解析器呢&#xff1f; 因为很多项目每次获取用户信息&#xff0c;需要重复从请求头中获取token&#xff0c;用token再去redis或是sql中去拿到存储的计本对象&#xff0c;再将获取到的Json数据&#xff0c;转化为我们需要的对象等代码&#xff0c;作为一名程…...

Python Unittest ddt数据驱动

1、数据驱动介绍&#xff1a; ddt.ddt&#xff08;类装饰器&#xff0c;申明当前类使用ddt框架&#xff09;ddt.data&#xff08;函数装饰器&#xff0c;用于给测试用例传递数据&#xff09;&#xff0c;支持传python所有数据类型&#xff1a;数字&#xff08;int&#xff0c;…...

Vue自定义组件遇到分页传输数据不正确解决办法

测试环境 Vue3 Element Plus 遇到问题 <el-table:data"tableData">...其他el-table-column<template #default"scope">// 自定义组件<my-button name"编辑" :id"scope.row.id"/ ></template></el-table&…...

ABAP 辨析CO|CN|CA|NA|CS|NS|CP|NP

1、文档说明 本篇文档将通过举例&#xff0c;解析字符的比较运算符之间的用法和区别&#xff0c;涉及到的操作符&#xff1a;CO|CN|CA|NA|CS|NS|CP|NP 2、用法和区别 用法总览 以下举例&#xff0c;几乎都使用一个字符变量和一个硬编码字符进行对比的方式&#xff0c;忽略尾…...

RK3568平台开发系列讲解(设备驱动篇)Pinctrl子系统详解

🚀返回专栏总目录 文章目录 一、pinctrl子系统结构描述二、重要的概念三、主要的数据结构和接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们知道在许多soc内部包含有多个pin控制器,通过pin控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。Linux…...

ROS小车研究笔记:二维SLAM建图简介与源码分析

ROS提供了现成的各类建图算法实现。如果只是应用的话不需要了解详细算法原理&#xff0c;只需要了解其需要的输入输出即可。 1 Gmapping Gmapping使用粒子滤波算法进行建图&#xff0c;在小场景下准确度高&#xff0c;但是在大场地中会导致较大计算量和内存需求 Gmapping需要…...

番外9:使用ADS对射频功率放大器进行非线性测试1(以IMD3测试为例)

番外9&#xff1a;使用ADS对射频功率放大器进行非线性测试1&#xff08;以IMD3测试为例&#xff09; 一般可以有多种方式对射频功率放大器的非线性性能进行测试&#xff0c;包括IMD3、ACPR、ACLR等等&#xff0c;其中IMD3的实际测试较为简单方便不需要太多的仪器。那么在ADS中…...

书匠策AI降重降AIGC到底有多野?论文党看完直接封神!

各位论文战士们&#xff0c;今天不聊开题&#xff0c;不聊答辩&#xff0c;咱们聊点真正救命的东西——降重和降AIGC。 你有没有经历过这种绝望&#xff1a;查重报告一出来&#xff0c;红得像过年的对联&#xff1f;导师一句"你这AIGC率太高了&#xff0c;重写"&…...

配置openclaw使用taotoken作为其底层大模型供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 配置 OpenClaw 使用 Taotoken 作为其底层大模型供应商 基础教程类&#xff0c;引导使用 OpenClaw 这类 Agent 框架的开发者&#x…...

微信好友关系检测完整指南:快速找出谁删了你

微信好友关系检测完整指南&#xff1a;快速找出谁删了你 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 你是否曾…...

ElevenLabs湖南话TTS深度评测(2024真实场景压测报告):声调准确率92.6%、连读自然度行业首破88分

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs湖南话语音技术概览 ElevenLabs 作为全球领先的语音合成平台&#xff0c;其多语言支持能力持续扩展&#xff0c;但需明确指出&#xff1a;截至 2024 年底&#xff0c;ElevenLabs 官方模型库*…...

别再只会点灯了!用ESP8266+Blinker做个远程浇花器,附完整代码和手机App配置

从远程点灯到智能浇花&#xff1a;用ESP8266Blinker打造阳台植物管家 清晨的阳光透过窗帘洒进来&#xff0c;你躺在床上用手机轻轻一点&#xff0c;阳台上的花草便开始了自动灌溉——这不是科幻电影的场景&#xff0c;而是每个物联网爱好者都能实现的智能生活小确幸。对于已经…...

别再傻傻重启了!用JRebel插件实现Spring Boot项目秒级热更新(附2024最新激活与配置避坑指南)

解锁Spring Boot开发新姿势&#xff1a;JRebel热更新实战全攻略 每次修改完代码后&#xff0c;那个漫长的等待重启进度条的过程&#xff0c;是不是让你忍不住想砸键盘&#xff1f;作为经历过数百次Spring Boot项目重启的老司机&#xff0c;我完全理解这种抓狂感。直到遇见了JR…...

华硕笔记本终极性能优化方案:G-Helper轻量级控制工具完全指南

华硕笔记本终极性能优化方案&#xff1a;G-Helper轻量级控制工具完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…...

Claude Code 总被封号怎么办,用 Taotoken 稳定接入大模型服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Claude Code 总被封号怎么办&#xff0c;用 Taotoken 稳定接入大模型服务 许多开发者在日常工作中依赖 Claude Code 作为编程助手&…...

Chrome-Charset:3步彻底解决网页乱码问题,告别天书般的浏览体验![特殊字符]

Chrome-Charset&#xff1a;3步彻底解决网页乱码问题&#xff0c;告别天书般的浏览体验&#xff01;&#x1f680; 【免费下载链接】Chrome-Charset An extension used to modify the page default encoding for Chromium 55 based browsers. 项目地址: https://gitcode.com/…...

英雄联盟Akari助手:一键智能配置,释放你的游戏潜能 [特殊字符]

英雄联盟Akari助手&#xff1a;一键智能配置&#xff0c;释放你的游戏潜能 &#x1f680; 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在…...