Promise (三) async/await

Promise异步问题(async await/then) Promise处理异步操作 阅读详情

async 函数

async 函数是使用async关键字声明的函数。 async 函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。

特点 

1. 函数的返回值为 promise 对象
2. promise 对象的结果由 async 函数执行的返回值决定
        async function main(){
            //1. 如果返回值是一个非Promise类型的数据,会返回一个resolved的promise对象,值为该数据
            // return 521;
            //2. 如果返回的是一个Promise对象
            return new Promise((resolve, reject) => {
                resolve('OK');
                // reject('Error');
            });
            //3. 抛出异常
            // throw "Oh NO";
        }

        let result = main();

        console.log(result);

await 表达式

1. await 右侧的表达式一般为 promise 对象 , 但也可以是其它的值
2. 如果表达式是 promise 对象 , await 返回的是 promise 成功的值
3. 如果表达式是其它值 , 直接将此值作为 await 的返回值
        async function main(){
            let p = new Promise((resolve, reject) => {
                resolve('OK');
                // reject('Error');
            })
            //1. 右侧为promise的情况
            // let res = await p;
            //2. 右侧为其他类型的数据
            let res2 = await 20;
            // console.log(res2);   // 20
            //3. 如果promise是失败的状态
            // try{
            //     // let res3 = await p;
            // }catch(e){
            //     console.log(e);
            // }
        }

        main();

注意

1. await 必须写在 async 函数中 , 但 async 函数中可以没有 await
2. 如果 await 的 promise 失败了 , 就会抛出异常 , 需要通过 try...catch 捕获处理

async与await结合

const fs = require('fs');
const util = require('util');
// 将 API 转为promise形式的函数
const mineReadFile = util.promisify(fs.readFile);

//回调函数的方式
// fs.readFile('./resource/1.html', (err, data1) => {
//     if(err) throw err;
//     fs.readFile('./resource/2.html', (err, data2) => {
//         if(err) throw err;
//         fs.readFile('./resource/3.html', (err, data3) => {
//             if(err) throw err;
//             console.log(data1 + data2 + data3);
//         });
//     });
// });

//async 与 await
// 出错也不需要每一层都去判断,使用try...catch即可
async function main(){
    try{
        //读取第一个文件的内容
        let data1 = await mineReadFile('./resource/1.html');
        let data2 = await mineReadFile('./resource/2.html');
        let data3 = await mineReadFile('./resource/3.html');
        console.log(data1 + data2 + data3);
    }catch(e){
        console.log(e.code);
    }
}

main();
深入理解 JavaScript 的 Promise 与 async/await 在 JavaScript 中,异步操作允许程序在等待某个任务完成时,继续执行其他代码,而不会阻塞主线程。这对于处理如网络请求、文件读写、定时器等耗时任务尤为重要。Promise 是一种用于处理异步操作的对象,它代表一个尚未完成但预计会在未来某个时间点完成的操作。Pending(待定) :初始状态,操作尚未完成。Fulfilled(已完成) :操作成功完成。Rejected(已拒绝) :操作失败。在现代 JavaScript 开发中,异步编程至关重要。 阅读详情

相关推荐

Promise、Axios、async/await 全量解析

Promise 是 ES6 引入的异步编程解决方案,它是一个「代表了异步操作最终完成(或失败)及其结果值的对象」,本质是一个构造函数,用于封装异步操作并获取其结果。是 ES2017(ES8)引入的异步编程语法,本质是 Promise 的语法糖,它不改变 Promise 的底层原理,只是提供了更简洁、更接近同步代码的写法,让异步代码的阅读和编写更加直观。Axios 是一款基于 Promise 的开源 HTTP 客户端。

m0_50511175的博客 799

你可能忽略的 async/await 问题

async/await大家肯定都用过,在处理异步操作的时候真的是很方便。 如果有还不熟悉的小伙伴可以看笔者之前的文章:带你理解 async/await 那今天主要讲一些在使用async/await时容易忽略和犯错的地方。 一个例子 下面是一个常见的vue代码片段: async initStore(query) { await this.getConfig(); await this.getUser(); await this.checkRussianCo...

高先生的猫 1086

JavaScript 异步编程之 Promise 与 Async/Await 详解

Promise是一个表示异步操作最终完成(或失败)并返回结果的对象。一个PromisePending(待定):初始状态,表示异步操作尚未完成。Fulfilled(已兑现):异步操作成功完成,并返回一个结果。Rejected(已拒绝):异步操作失败,并返回一个错误原因。// 异步操作// 假设操作成功resolve("操作成功!");} else {reject("操作失败!");});async和await是基于Promise的语法糖,旨在使异步代码看起来像同步代码。async。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1177

解决跨域问题的方法 --- JSONP

JOSNP全称json with padding,可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

z_2532040197的博客 330

Visual studio 2013 配置 Halcon 13 (非抄袭)

Visual studio 2013 配置 Halcon 13.0.2.2 (其他版本适用) 针对网上抄袭的配置方法均不可用,写了一篇亲试可行的配制方法。如下: 1.下载Halcon安装后(C:\Program Files\MVTec\HALCON-13.0) 添加环境变量,(按下win按键,键入“环境变量”,出现 “编辑系统环境变量”后按下enter即可打开,下方找到“环境变量”按钮)的系...

huyanjackson的专栏 1042

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2921

使用vue搭建项目后,eslint与await之间的小纠葛

##eslint配置文件中加入如下代码, 才会不报次错误

qq_38992657的博客 1292

体素坐标(voxel_coors)在mmdetection3d中的理解

体素坐标(voxel_coors)在mmdetection3d中的理解

weixin_38362784的博客 4217

Promises & async/await等异步处理

我们都只到在js代码中很多动作都是异步执行的。但是如果回调嵌套层数太多就会造成代码层次加深,维护难度增加,这也就是我们说的回调地狱。为了解决这种问题我们有和多种解决办法,目前最常用的就是Promise 在说异步之前我们首先要了解一下js执行栈(call stack)! 一个数据结构,用于存放各种函数的执行环境,每一个函数执行之前他的相关信息会加入到执行栈。函数调用之前创建执行环境(执行上期下文),...

sxm666666的博客 427

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

simulink可控励磁同步电机模型分析

他励同步电机模型分析

qq_26681609的博客 5551

JavaScript Promise 全解析(三):使用async/await结合try...catch处理Promise错误的完整指南

JavaScript异步编程中的错误处理:async/await与try...catch实践指南 本文系统讲解了在JavaScript异步编程中使用async/await与try...catch组合进行错误处理的方法: 基础用法:通过try...catch捕获单个await操作的错误,保持代码的同步风格 多请求处理: 连续await统一捕获错误 使用Promise.all处理并行异步操作 错误传播机制: 通过重新抛出异常实现错误向上传播 分层处理不同级别的错误 高级技巧: 实现超时控制机制 构建自动重试逻辑

qq_31435455的博客 767

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2

一次性生成4个变量所能生成的24种链式中介并作图

weixin_64183017的博客 3236

【校招VIP】前端考点之Promise、async、await

promise是js异步编程的新的解决方案,是一个构造函数,用来封装一个异步操作,并可以获得其结果简单来说, async/await 是基于 Promise 之上的一个语法糖,可以让异步操作更加的简单明了。

shuize123的博客 112

【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)

随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,而人工智能也发展越来越快,Python语言使用越来越广,本章节主要介绍如何使用Python语言基于Pytest自动化框架来实现DoIP诊断自动化测试。首先回顾一下DoIP诊断基础知识:DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。

测试领域技术分享 3795

嵌入式开发之瑞芯微RK356x--基本环境搭建

嵌入式环境搭建

NexyHO的博客 617

异步编程演进:从回调、Promise到async/await全解析

异步编程是提升程序并发性能的关键技术,核心目标是避免IO等待期间CPU空转,让资源得到充分利用。从最初的回调函数,到具备统一状态管理的Promise,再到基于协程实现的async/await,异步方案的每一次演进都在解决实际痛点,并试图将复杂的网状心智模型重新拉回线性。理解事件循环、宏任务与微任务调度、协程切换等原理,能帮助开发者在高并发、IO密集场景下做出更合理的技术选型。本文系统梳理了异步编程的演进路径,分析了各阶段的优缺点和常见问题,并给出了实际项目中的任务编排、错误隔离、超时取消与代码迁移的实践思路

weixin_33290540的博客 225

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

异步编程体系(Promise、async/await)

Promise 是 ES6 推出的异步编程解决方案,是一个用于承载异步操作的对象,用来解决传统回调函数导致的回调地狱问题,让异步代码写法更规整、可读性更强、便于维护。简单理解:Promise 是一个承诺,异步操作早晚都会给出结果(成功/失败),可以提前绑定处理函数,等待结果触发。

2503_93474872的博客 345

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

关于async/await、promise和setTimeout执行顺序

前段时间领导给我们出了一道题,关于async/await、promise和setTimeout的执行顺序,网上查了查资料,这是头条的一道笔试题,记录一下,加深理解。 题目如下: async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end'); } async...

yun_hou的博客 3万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Promise与Async/Await的区别

前言 目录前言一、什么是promise二、什么是Async/Await?三、promise的使用四、Async/Await的使用五、两者区别六、总结 一、什么是promise 二、什么是Async/Await? 三、promise的使用 四、Async/Await的使用 五、两者区别 六、总结 代码下载(p-react-router分支):https://gitee.com/staraliang/react17-app/tree/p-hook/ 觉得本文写的不错的,希望点赞、收藏、加关注,每月

程序员良仔 1万+

async/await和promise的区别

async async函数定义 async函数是使用关键字声明的函数。async 是“异步”的简写,所以应该很好理解 async 用于申明一个 function 是异步的。 作用 用于解决:异步程序产生的bug ####async函数的语法 async function name([param[, param[, ... param]]]) { statements } 参数:name 函数名称 ​ param 要传递

m0_65169658的博客 1万+

Promise与async/await

Promise和是JavaScript中处理异步操作的两种重要方式。

yuren_xia的博客 1771

鸿蒙 taskpool、Promise 和 async/await的区别

本文对比了HarmonyOS开发中三种异步处理方式:Promise、async/await和taskpool。Promise是ECMAScript6标准,通过状态机和微任务队列解决回调地狱问题;async/await是Promise的语法糖,用同步写法处理异步流程;taskpool则是HarmonyOS提供的线程池API,用于执行CPU密集型任务避免阻塞UI线程。三者定位不同:Promise/async/await处理逻辑并发,taskpool实现物理并发。实际开发中可组合使用,如用async/await等

梦想不只是梦与想的博客 1722

Promise、Async/Await 详解

Promise、Async/Await 详解,Promise的参数resolve和reject、回调函数.then 和.catch和方法 .all() 和 .race()的使用。以及语法糖async/await的使用方法。

m0_61663332的博客 5590

promise与 fetch、async/await

包裹,这样传进promise.all的数据都是resolved状态的。catch方法返回的promise实例会被。在Promise里,执行顺序是。

luemeon的博客 1249

Async/Await与Promise区别

自从Node的7.6版本,已经默认支持async/await特性了。如果你还没有使用过他,或者对他的用法不太了解,这篇文章会告诉你为什么这个特性“不容错过”。本文辅以大量实例,相信你能很轻松的看懂,并了解Javascript处理异步的一大杀器。 初识Async/await 对于还不了解Async/await特性的同学,下面一段是一个“速成”培训。 Async/await 是Javascr...

high_height的博客 2603
上一篇: Promise 二:关键问题
下一篇: Ajax 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值