工作中Promise用法总结

工作中Promise用法总结,后面会持续更新觉得有意义的。

1.构造Promise

一般情况下代码是这样的:

async function fn() {return new Promise((resolve, reject) => {let list = []resolve(list)}
}await fn()

最后的返回值,如果promise的状态是成功,则会返回

2.连环写法

在回调中写,res中写下一个promise。这样的做法可以保证执行顺序。

当然,async,await也是可以的。但是需要值去接收,去判断。

这种也是比较适合顺序去执行的。其实也可以用第三种写法

async function getGoodsInfo(goodsLink) {return new Promise((resolve, reject) => {let goods_id = []xxxAPI({"query": {"sign": geneSignStr(),"content": goodsLink,"type": "1"}}, res => {console.log("type1", res.data.goods_id)goods_id.push(res.data.goods_id)xxxAPI({"query": {"sign": geneSignStr(),"content": goodsLink,"type": "2"}}, res1 => {goods_id.push(res1.data.goods_id)console.log("type2", res1.data.goods_id)xxxAPI({"query": {"sign": geneSignStr(),"content": goodsLink,"type": "3"}}, res2 => {console.log("type3", res2.data.goods_id)goods_id.push(res2.data.goods_id)resolve(goods_id)})})})})
}

3.promise.all()

这里给出一个环境,比如我有一个100个数据的列表,100个数据上面需要展示时间进度,项目进度什么的,然后项目进度需要id去请求,也就是说,要请求100次。

如果我们用同步的写法,这个数据肯定是不稳定的,并且会时刻变化。

做法就是,遍历这一百个数据,在循环中拿到id,然后调取接口,给对象赋值(正常操作)。最关键来了,循环内部需要是一个promise对象,请求成功的话是一个resolve,然后需要做的,因为循环遍历了100次,找一个数组,把每一次请求都push进去。最后用async Promise(arr)来执行,如果说所有的请求都成功,最后返回值就是整个处理过后的对象。如果返回失败,我们可以用catch去抓取失败。

整个思路是这样,那我们看看代码:

// 获取项目进度-并发
async function getProjectProgressAll(list) {let tasks = [] //这个数组存放多个promisefor(let item of list) {// 遍历对象数组let p = new Promise((resolve, reject) => {xxxAPI.getDaihuoAnalysisData({params: {"daihuo_project_id": item.project_id}}, res => {if (res.result && res.result.excel_data && res.result.excel_data) {xxx} else {xxx        }})resolve()})p.then(() => {tasks.push(p)}).catch((err) => {console.log(err)})}await Promise.all(tasks)return list
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈杭州某小公司面试的经历

#面试#本人bg211本,一段实习,前几天面了杭州某小厂公司,直接给我干无语了! 1、先介绍介绍你自己,我说了我的一个情况。 2、没获奖和竞赛经历吗?我说确实没有呢,面试官叹气了一下,只是…

300分钟吃透分布式缓存-27讲:Redis是如何进行主从复制的?

Redis 复制原理 为了避免单点故障,数据存储需要进行多副本构建。同时由于 Redis 的核心操作是单线程模型的,单个 Redis 实例能处理的请求 TPS 有限。因此 Redis 自面世起,基本就提供了复制功能,而且对复制策略不断进行优化。 通…

基于SWOT的智能手机企业财务战略研究1.62

摘 要 近些年,网络技术日新月异,智能手机深受消费者喜爱,人们通过网络,手机应用,可以极大地方便人们学习,工作等等。由于国家对电信行业的大力支持,中国消费者群体逐步成为最具潜力的手机购买者…

十六、接口隔离原则、反射、依赖注入

接口隔离原则、反射、特性、依赖注入 接口隔离原则 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 五种原则当中的i 上一章中的接口,即契约。 契约就是在说两件事,甲方说自己不会多要,乙方会在…

朴素贝叶斯算法基础——案例:对新闻进行分类

贝叶斯公式 朴素:假设特征与特征之间相互独立 朴素贝叶斯算法:朴素贝叶斯 应用场景:文本分类(单词作为特征) 拉普拉斯平滑系数 Ni:F1词在C类别所有文档中出现的次数 N:所属类别C下的文档所…

《C++游戏编程入门》第2章 真值、分支与游戏循环: Guess My Number

《C游戏编程入门》第2章 真值、分支与游戏循环: Guess My Number 2.1 关系运算符2.2 条件语句02.score_rater.cpp02.score_rater2.cpp02.score_rater3.cpp 2.5 switch语句02.menu_chooser.cpp 2.6 while循环02.play_again.cpp 2.7 do循环02.play_again2.cpp 2.8 break和continu…

AHU 数据库 实验三

《数据库》实验报告 【实验名称】 实验3 数据库的连接查询 【实验目的】 1. 熟悉基本的连接查询的概念和作用; 2. 了解数据库管理系统DBMS 实现连接查询的基本方法; 3. 掌握SQL语言连接查询语句的语法和功能&#…

.NET CORE Aws S3 使用

1.安装指定的包 Install-Package AWSSDK.S3 -Version 3.3.104.10 2.使用帮助类 using System; using System.Collections.Generic; using System.Text; using Amazon; using Amazon.Runtime; using Amazon.S3; using Amazon.S3.Model; using System.IO; using System.Threadi…

Spring存储基础知识

一、对象存储 1.创建bean对象 public class User {public void sayHi() {System.out.println("hi student");} } 2.bean存入Spring 在spring-config.xml,将 bean(com.spring.demo.User)存到 Spring 容器中,它的名称…

【数据结构学习笔记】选择排序

【数据结构学习笔记】选择排序 参考电子书:排序算法精讲 算法原理 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元…

读取CSV数据并写入MySQL

import pandas as pd #import tushare as ts from sqlalchemy import create_engineimport baostock as bs #### 登陆系统 #### lg bs.login() # 显示登陆返回信息 print(login respond error_code:lg.error_code) print(login respond error_msg:lg.error_msg) #### 获取沪深…

STM32第十课:串口发送

一、usart串口 1.1 USART串口协议 串口通讯(Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里&…

主流数据库的区别

几个主流的数据库有: 1. MySQL:MySQL是一种关系型数据库管理系统,常用于Web应用程序开发和数据存储。 2. Oracle:Oracle是一种关系型数据库管理系统,由Oracle Corporation开发和销售。它广泛用于企业级应用程序中。 …

在使用qml的qmldir文件创建常用组件报错unknow component

解决方法:Qt Creator中的工具-->QML/JS-->重置代码模型 参考博文:QML自定义模块及qmldir的使用_同一资源文件目录下的qml模块使用-CSDN博客 不一样的地方是我给我的文件起了别名 以及我的qrc文件路径有前缀/qml 总体操作: 1.使用模块中的组件时…

线程与进程的区别、协程

1【线程与进程的区别、协程】 【1】 进程跟线程 进程(Process)和 线程(Thread)是操作系统的基本概念, 但是它们比较抽象, 不容易掌握。关于多进程和多线程,教科书上对经典的一句话“进程是资源分…

铭文:探索比特币世界的数字印记

铭文是什么? 铭文指的是在某种物品(如石头、硬币、平板等)上刻有文字。在比特币领域,铭文指的是刻在聪(satoshi)上的元数据。比特币的最小单位是聪,1比特币可分为1亿聪。每个聪都通过序数理论进…

解决WSL2的ubuntu20.04中安装docker出现无法连接的问题(Cannot connect to the Docker daemon)

wsl2的ubuntu20.04系统安装docker可以参考官网教程操作,我个人喜欢参考其中的离线安装方式:Install from a package。只需要按照官网一步步操作即可,跟普通的ubuntu20.04的安装是一样的步骤。 在安装完以后,发现一旦使用docker相…

OpenAI GPT LLMs 高级提示词工程方法汇总

原文地址:An Introduction to Prompt Engineering for OpenAI GPT LLMs Github:Prompt-Engineering-Intro 2023 年 3 月 2 日 提示工程指南 | Prompt Engineering Guide Naive 提示词:带有提示的情感分类器 prompt Decide whether a T…

计算机缺失iutils.dll怎么办,分享5种靠谱的解决方法

​在计算机系统运行过程中,如果发现无法找到或缺失iutils.dll文件,可能会引发一系列的问题与故障。首先,由于iutils.dll是系统中一个重要的动态链接库文件,它的主要功能可能涉及到系统核心服务、应用程序支持或者特定功能模块的运…

互联网高频面:输入URL按下回车后,中间发生了什么

题目 输入URL按下回车后,中间发生了什么 这个问题其实是计算机网络里面很经典的一个问题,不能去死机硬背,很考察对网络架构和通信原理的理解,也是各个互联网大厂喜欢考察的面试题。 一些图片参考了小林的计算机网络面经 从输入…