Promise async await

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

简介:回调

  • JS会提供很多函数,允许异步行为。换句话说,现在开始执行的行为。但它们会在稍后完成。
  • 异步执行某项功能的函数应该提供一个 callback 参数用于在相应事件完成时调用。
  • 处理Error:
    • 加载成功时,它会调用 callback(null, xxx),否则调用 callback(error),这种被称为Error优先回调风格。
    • 约定:
      • callback 的第一个参数是为 error 而保留的。一旦出现 error,callback(err) 就会被调用。
      • 第二个参数(和下一个参数,如果需要的话)用于成功的结果,此时 callback(null, result1, result2…) 就会被调用。
    • 单一的 callback 函数可以同时具有报告 error 和传递返回结果的作用。
  • 但对于一个接一个的多个异步行为,随着调用嵌套的增加,代码层次变得更深,维护难度也随之增加,尤其是我们使用的是可能包含了很多循环和条件语句的真实代码,这些被称为“回调地狱”或“厄运金字塔”。
  • 有其他的方法可以避免此类金字塔,最好的方法之一就是promise

Promise

  • Promise是将生产者代码和消费者代码连接在一起的一个特殊JS对象,是异步编程的一种解决方案

  • 构造器语法:

    let promise = new Promise(function(resolve, reject) {
      if (/* 异步操作成功 */){
        resolve(value);
      } else {
        reject(error);
      }
    });
    
  • 传递给 new Promise 的函数被称为 executor,当 new Promise 被创建,executor 会自动运行

  • 它的参数 resolve 和 reject 是由JS自身提供的回调,代码仅在 executor 的内部。当 executor 获得了结果,无论是早还是晚都没关系,它应该调用以下回调之一:

    • resolve(value):任务成功完成并带有结果value
    • reject(error):如果出现了error,error即为error对象
  • executor 只能调用一个 resolve 或一个 reject,任何状态的更改都是最终的。并且,resolve/reject 只需要一个参数(或不包含任何参数)

  • executor 通常是异步执行某些操作,并在一段时间后调用 resolve/reject,但这不是必须的,我们可以立即调用 resolve 或 reject

  • promise 对象具有以下内部属性:

    • state :最初是 "pending"
      • resolve 被调用时变为 "fulfilled"
      • reject 被调用时变为 "rejected"
    • result:最初是 undefined
      • resolve(value) 被调用时变为 value
      • reject(error) 被调用时变为 error
    • 与最初的 pending promise 相反,一个 resolved 或 rejected 的 promise 都会被称为 settled
      在这里插入图片描述
  • state 和 result 属性都是内部的,无法直接访问它们,但我们可以对它们使用 .then/.catch/.finally 方法

  • 消费者:then, catch

    • .then语法:

      promise.then(
        function(result) { /* handle a successful result */ },
        function(error) { /* handle an error */ }
      );
      
      • .then 的第一个参数是一个函数,在 promise resolved 且接收到结果后执行
      • .then 的第二个参数也是一个函数,在 promise rejected 且接收到 error 信息后执行
    • 只对成功完成的情况感兴趣,可以只为 .then 提供一个函数参数

    • 只对 error 感兴趣,可以使用 null 作为第一个参数:.then(null, f),或者也可以使用 .catch(f)

  • 简单的例子:

function timeout(ms) {
   return new Promise((resolve, reject) => {
     setTimeout(resolve, ms, 'done');
   });
 }
 
 timeout(100).then((value) => {
 console.log(value);
 });
  • timeout方法返回一个Promise实例,表示一段时间以后才会发生的结果。过了指定的时间(ms参数)以后,Promise实例的状态变为resolved,就会触发then方法绑定的回调函数。

  • promise 中也有 finally,调用 .finally(fn) 类似于 .then(f, f),因为当 promise settled 时 f 就会执行:无论 promise 被 resolve 还是 reject。finally 的功能是设置一个处理程序在前面的操作完成后,执行清理/终结。

  • PS:finally(f) 并不完全是 then(f, f) 的别名

    • finally 没有参数
    • finally 将结果或 error “传递”给下一个合适的处理程序
      • 成功就传递给下一个then
      • 失败就传递给下一个catch
    • finally 也不应该返回任何内容,如果它返回了会默认被忽略
  • 基于回调的好处:

    • promise允许我们按照自然顺序进行编码;而callback就必须要知道如何处理结果
    • promise可以多次调用.then;而callback只能有一个回调
  • 常见写法:

    new Promise(请求1)
        .then(请求2(请求结果1))
        .then(请求3(请求结果2))
        .then(请求4(请求结果3))
        .then(请求5(请求结果4))
        .catch(处理异常(异常信息))
    

使用promise进行错误处理

  • 当一个promise被reject时,将移交到最近的rejection处理程序

  • .catch 处理 promise 中的各种 error:在 reject() 调用中的,或者在处理程序中抛出的 error

  • 如果给定 .then 的第二个参数(即 error 处理程序),那么 .then 也会以相同的方式捕获 error

  • 未处理的rejection

    new Promise(function() {
      noSuchFunction(); // 这里出现 error(没有这个函数)
    })
      .then(() => {
        // 一个或多个成功的 promise 处理程序
      }); // 尾端没有 .catch!
    
    • 如果出现了一个 error,并且在这没有 .catch,那么 unhandledrejection 处理程序就会被触发,并获取具有 error 相关信息的 event 对象,所以我们就能做一些后续处理了

      window.addEventListener('unhandledrejection', function(event) {
        // 这个事件对象有两个特殊的属性:
        alert(event.promise); // [object Promise] —— 生成该全局 error 的 promise
        alert(event.reason); // Error: Whoops! —— 未处理的 error 对象
      });
      
      new Promise(function() {
        throw new Error("Whoops!");
      }); // 没有用来处理 error 的 catch
      
  • 例子 .catch会被触发吗:

    new Promise(function(resolve, reject) {
      setTimeout(() => {
        throw new Error("Whoops!");
      }, 1000);
    }).catch(alert);
    
    • 不一定会被触发。函数代码周围有个隐式的 try..catch,所有同步错误都会得到处理。但是这里的错误并不是在 executor 运行时生成的,而是在稍后生成的,因此,promise 无法处理它。

Promise API

Promise.all

  • 并行执行多个 promise,并等待所有 promise 都准备就绪

  • 使用场景:一些游戏类的素材比较多的应用,打开网页时,预先加载需要用到的各种资源如图片、flash以及各种静态文件。所有的都加载完后,我们再进行页面的初始化

  • Promise.all 接受一个可迭代对象(通常是一个数组项为 promise 的数组),并返回一个新的 promise

  • 例子:

    Promise.all([
      new Promise(resolve => setTimeout(() => resolve(1), 3000)), // 1
      new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2
      new Promise(resolve => setTimeout(() => resolve(3), 1000))  // 3
    ]).then(alert); // 1,2,3 当上面这些 promise 准备好时:每个 promise 都贡献了数组中的一个元素
    
    • 结果数组中元素的顺序与其在源 promise 中的顺序相同。即使第一个 promise 花费了最长的时间才 resolve,但它仍是结果数组中的第一个
  • 任意一个 promise 被 reject,由 Promise.all 返回的 promise 就会立即 reject,并且带有的就是这个 error

  • Promise.all(...) 接受含有 promise 项的可迭代对象(大多数情况下是数组)作为参数,但如果这些对象中的任何一个不是 promise,那么它将被按原样传递给结果数组

    Promise.all([
      new Promise((resolve, reject) => {
        setTimeout(() => resolve(1), 1000)
      }),
      2,
      3
    ]).then(alert); // 1, 2, 3
    

Promise.allSettled

  • 最近新增的特性,旧浏览器可能需要polyfills
  • Promise.allSettled 等待所有的 promise 都被 settle,无论结果如何,结果数组具有:
    • {status:"fulfilled", value:result} 对于成功的响应
    • {status:"rejected", reason:error} 对于 error
  • 例如,我们想要获取(fetch)多个用户的信息。即使其中一个请求失败,我们仍然对其他的感兴趣

Promise.race

  • 只等待第一个settled的promise并获取其结果或error

  • 例子:

    let promise = Promise.race(iterable);
    Promise.race([
      new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
      new Promise((resolve, reject) => setTimeout(() => reject(new Error("Whoops!")), 2000)),
      new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000))
    ]).then(alert); // 1
    
    • 第一个 promise 最快,所以它变成了结果,其他的result/error会被忽略
  • 谁跑得快,以谁为准执行回调

  • 使用场景:可以用race给某个异步请求设置超时时间,并且在超时后执行相应的操作

     //请求某个图片资源
        function requestImg(){
            var p = new Promise((resolve, reject) => {
                var img = new Image();
                img.onload = function(){
                    resolve(img);
                }
                img.src = '图片的路径';
            });
            return p;
        }
        //延时函数,用于给请求计时
        function timeout(){
            var p = new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject('图片请求超时');
                }, 5000);
            });
            return p;
        }
        Promise.race([requestImg(), timeout()]).then((data) =>{
            console.log(data);
        }).catch((err) => {
            console.log(err);
        });
    
    • requestImg函数会异步请求一张图片,把地址写为"图片的路径",所以肯定是无法成功请求到的。timeout函数是一个延时5秒的异步操作。我们把这两个返回Promise对象的函数放进race,于是它俩就会赛跑。
    • 如果5秒之内图片请求成功了,那么进入then方法,执行正常的流程。
    • 如果5秒钟图片还未成功返回,那么timeout就跑赢了,则进入catch,报出“图片请求超时”的信息

Promise.any

  • 与Promise.race类似,区别在于它只等待第一个 fulfilled 的 promise,并将这个 fulfilled 的 promise 返回
  • 如果给出的 promise 都 rejected,那么返回的 promise 会带有 AggregateError —— 一个特殊的 error 对象,在其 errors 属性中存储着所有 promise error

Promise.resolve

  • 给定 value 创建一个resolved的 promise

Promise.reject

  • 给定 error 创建一个 rejected 的 promise

Promisification

  • 将一个接受回调的函数转换为一个返回 promise 的函数
  • Promisification 是一种很好的方法,特别是在使用 async/await 的时候,但不是回调的完全替代
  • 一个promise可能只有一个结果,但从技术上讲,一个回调可能被调用很多次。因此,promisification 仅适用于调用一次回调的函数,进一步的调用将被忽略。

微任务

  • promise 的处理程序 .then、.catch 和 .finally 都是异步的。即便一个 promise 立即被 resolve,.then、.catch 和 .finally 下面 的代码也会在这些处理程序之前被执行。

    let promise = Promise.resolve();
    promise.then(() => alert("promise done!"));
    alert("code finished"); // 这个 alert 先显示
    
  • 异步任务需要适当的管理,ECMA 标准规定了一个内部队列 PromiseJobs,通常被称为微任务队列。当一个 promise 准备就绪时,它的 .then/catch/finally 处理程序就会被放入队列中,但是它们不会立即被执行。当 JavaScript 引擎执行完当前的代码,它会从队列中获取任务并执行它。

  • 如果有一个包含多个 .then/catch/finally 的链,那么它们中的每一个都是异步执行的。也就是说,它会首先进入队列,然后在当前代码执行完成并且先前排队的处理程序都完成时才会被执行。

  • 想让 code finished 在 promise done 之后出现,就要把.then放入队列里

    Promise.resolve()
      .then(() => alert("promise done!"))
      .then(() => alert("code finished"));
    
  • 现在可以解释 JavaScript 是如何发现未处理的 rejection 的。如果一个 promise 的 error 未被在微任务队列的末尾进行处理,则会出现“未处理的 rejection”

  • 正常来说,我们会在 promise 链上添加 .catch 来处理 error:

    let promise = Promise.reject(new Error("Promise Failed!"));
    promise.catch(err => alert('caught'));
    
    // 不会运行:error 已经被处理
    window.addEventListener('unhandledrejection', event => alert(event.reason));
    
  • 忘记添加 .catch,那么,微任务队列清空后,JavaScript 引擎会触发下面这事件:

    let promise = Promise.reject(new Error("Promise Failed!"));
    
    // Promise Failed!
    window.addEventListener('unhandledrejection', event => alert(event.reason));
    
  • 如果迟一点再处理:

    let promise = Promise.reject(new Error("Promise Failed!"));
    setTimeout(() => promise.catch(err => alert('caught')), 1000);
    
    // Error: Promise Failed!
    window.addEventListener('unhandledrejection', event => alert(event.reason));
    
    • 我们会先看到 Promise Failed!,然后才是 caught。
    • 当微任务队列中的任务都完成时,才会生成 unhandledrejection:引擎会检查 promise,如果 promise 中的任意一个出现 rejected状态,unhandledrejection 事件就会被触发
    • 在上面这个例子中,被添加到 setTimeout 中的 .catch 也会被触发,只是会在 unhandledrejection 事件出现之后才会被触发,所以它并没有改变什么(没有发挥作用)

async / await

  • async / await 是以更舒适的方式使用 promise 的一种特殊语法

  • async 可以被放置在一个函数前面,即这个函数总是返回一个 promise,其他值将自动被包装在一个 resolved 的 promise 中

  • await 它只在 async 函数内工作,它让 JavaScript 引擎等待直到 promise 完成(settle)并返回结果。如果有 error,就会抛出异常,就像那里调用了 throw error 一样

  • await 实际上会暂停函数的执行,直到 promise 状态变为 settled,然后以 promise 的结果继续执行。这个行为不会耗费任何 CPU 资源,因为 JavaScript 引擎可以同时处理其他任务:执行其他脚本,处理事件等

Async、await是什么?跟promise有什么区别?使用的好处是什么 是建立在 Promise 之上的语法糖,它的底层依然是 Promise。它的目的是为了让异步代码的书写和阅读更像同步代码,从而更简洁、更易维护。Promise:是用于处理异步操作的标准化对象(ES6)。:是基于 Promise 的新语法(ES2017),用于更优雅地使用Promise。Promise 是一个对象,它代表了一个异步操作的最终完成(或失败)及其结果值。三种状态:pending(进行中)fulfilled(已成功)rejected(已失败)// 模拟成功或失败。 阅读详情

相关推荐

promise、async、await学习

文章目录前言一、Promise 的理解和使用1、Promise 是什么?(1)理解(2)promise 的状态改变(3)promise 的基本流程(4)promise 的基本使用①基本编码流程②使用 promise 封装基于定时器的异步③使用 promise 封装 ajax 异步请求2、为什么要用 Promise(1)指定回调函数的方式更加灵活(2)支持链式调用, 可以解决回调地狱问题① 什么是回调地狱②回调地狱的缺点③解决方案④终极解决方案3、如何使用 Promise(1) API2、promise 的几

qq_44872688的博客 1387

promise请求超时处理

promise请求超时处理

日渐肥胖的左 4233

JavaScript基础教程|使用promise进行错误处理,try-catch,rethrowing,未处理的rejection,

catch 处理 promise 中的各种 error:在 reject() 调用中的,或者在处理程序中抛出的 error。如果给定 .then 的第二个参数(即 error 处理程序),那么 .then 也会以相同的方式捕获 error。我们应该将 .catch 准确地放到我们想要处理 error,并知道如何处理这些 error 的地方。处理程序应该分析 error(可以自定义 error 类来帮助分析)并再次抛出未知的 error(它们可能是编程错误)。

VAN 1287

利用promise实现一个超时请求处理

今天面试官问的我这个问题,说实话,我当时懵逼了。 我第一个想法竟然是:嘶~这问题挺简单的啊,不就是用 Date 对象判断是否大于某个时间差么?于是写出了下面这段代码: let rest=function(){ // 开始是放在外面的,但是面试官说要尽可能不单独暴露值,于是鬼迷心窍(紧张)杀都没想就直接扔进来了... let date=Date.now(); return new Promise((resolve,reject)=>{ let _date=Date.now(); if(_d

flying meng的菜鸟居 1万+

Oracle Primavera P6实战手册:从入门到精通的企业项目管理秘籍

本文详细介绍了Oracle Primavera P6在企业项目管理中的实战应用,从环境配置到高级进度控制技巧,帮助用户从入门到精通。通过WBS设计、资源优化和情景模拟等核心功能,提升项目管理效率。特别适合需要处理复杂项目和多团队协作的企业用户。

weixin_29235923的博客 254

数据驱动的老年人健康管理与生活品质提升实践研究

摘要 全球人口老龄化趋势显著,2025年65岁以上人口预计达8.57亿,中国老年人口已突破3亿。老年人健康挑战突出,75%以上患慢性病,且独居老人心理健康与应急需求迫切。数据驱动的健康管理通过智能设备(如跌倒检测、远程监测)和AI技术(如疾病预测算法)提升效率,改善生活品质。研究提出差异化需求解决方案,如慢性病患者的持续监测与用药管理,高龄老人的综合护理服务,并探讨政策与商业模式以推动智慧养老产业发展,2024年市场规模已达6.8万亿元。

聚焦程序设计语言理论与前沿技术落地,拆解代码世界的底层逻辑,探索语言设计的 “创造与沟通” 之道。从编译原理、类型系统到 AI 技术在金融、医疗、制造、养老、大健康等领域的实战案例,分享硬核技术干货与工程化思考。 1632

用Promise实现一个请求超时

用Promise实现一个请求超时 今天面试了一家公司,面试官问了一个‘能不能自己实现一个请求超时’,刚开始还是有点慌的,经过思考有了一些思路 请求请求!!第一时间想到的就是promise 刚好promise有个api是promise.race([api1,api2…]),这个api会优先返回最快的那一个请求 let rest = function (_data = 4000) { return Promise.race([ upload(),

yang_web的博客 1932

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 318

关于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万+

【Unity】入门教程第一期-下载安装Unity编辑器(下)

讲解如何在Unity Hub中下载Unity编辑器以及IED环境

Xiaoxin的博客 2042

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 570

Promise与async/await

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

yuren_xia的博客 1772

C# 实现 Modbus 通信全教程(支持 TCP 和 RTU,含完整错误处理)

环境准备:安装 NModbus4 库,明确设备参数(IP/串口、地址、数据类型);连接设备:TCP 用 TcpClient,RTU 用 SerialPort,注意超时和参数匹配;读写数据:根据数据类型调用对应方法(读保持寄存器用 ReadHoldingRegisters);错误处理:捕获连接、超时、协议等异常,针对性排查问题。掌握这些后,即可轻松实现与工业设备的 Modbus 通信,为上位机开发提供稳定的数据交互能力。

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

异步回调Async Await与Promise区别

async await 它是基于promise的,为什么es6新增了这个?为了解决大量复杂不易读的Promise异步的问题才出现的,首先async await是有密切联系的!下面分别来介绍下它们的之前的关系! 1、async async必须声明的是一个function! async test= function () { return "我是个promise返回值" }; //语法错误 async必须声明的是一个function async 是“异步”的意思,所以应该很好理解 async

5049

2026年MathorCup数学应用挑战赛大数据竞赛赛道A论文分享

本文基于250款啤酒的化学与感官数据,构建以化合物-感官关系为核心的风味解析框架。通过多输出偏最小二乘与稀疏多任务建模,实现化合物组成到感官强度的稳健映射,并分离连续预测与等级校准;结合Spearman相关网络与重复抽样稳定性分析,筛选各感官属性的关键候选化合物;在低维潜在空间中保留真实风格统计结构,生成Tripel、Kriek等风格的合理化合物谱,并实现Pils/Lager向Tripel的受约束迁移,确保缺陷指标不恶化。三问共享统一数据尺度与模型逻辑,形成可检验的“预测—解释—生成”闭环,强调化学合理性与

180

【即插即用模块】注意力篇 | TGRS 2025 | SPR:显著性比例协调,注意力聚焦,先抓差异再精准特征融合!

本文提出SPRMamba网络中的显著性比例协调模块(SPR),用于解决遥感变化检测中非显著变化区域的识别难题。该模块通过差异提取→显著性识别→比例融合的三步流程,动态平衡显著与非显著特征表示。SPR包含空间滤波(SF)和上下文记忆(CMM)两个子模块,分别基于统计特征和深度学习自动区分特征差异中的显著性成分。实验表明,SPR能有效抑制背景噪声干扰,提升边缘检测精度,且随着模块数量的增加,模型性能持续改善。该模块计算成本低,可直接嵌入双输入特征融合场景,适用于各类需要动态特征平衡的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 368

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万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

介绍一下js中Promise、async、await的使用

是基于Promise的语法糖,使用它们可以让代码更加整洁且易于维护。

程序员诚哥 1548

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

promise、async和await

promise JavaScript是单线程 因为js语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。 异步任务 但这样很容易造成阻塞,所以把任务分成了同步任务和异步任务两种,异步模式可以同时执行多个异步任务,当主线程遇到异步任务,就把异步任务放进’任务队列’里,执行完同步任务后,再循环的去检查任务队列里面有哪些异步任务要执行, 回调函数 在没有promise前,使用的是回调函数的方式来执行异步任务,就是当主线程开始执行这个异步任务时,就去执行这个异步任务对应的回调函数。 异步任务比如:ajax

zy_lalala的博客 6114

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

/await右侧表达式为promise对象,得到的结果就是promise成功的value。//await右侧表达式不是promise对象,得到的结果就是表达式的值(本身)如果表达式是promise对象, await返回的是promise成功的值。//成功的promise 3。//失败的promise 3。//async函数的promise的结果由函数执行的结果决定。//return 1;//成功的promise 1。//async函数的返回值是一个promise对象。//失败的promise 2。

weixin_45980065的博客 923

promise和async-await的区别

今天手机上的Boss直聘突然弹出个消息: “promise和async-await有什么区别?”。 打开手机后,看了各路大神各抒己见,于是自己也找了找资料,以下是自己的总结和各路大神的回答。 1. 关于async-await的 以下均摘自MDN async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promi

MPFLY的博客 1万+

Promise和async以及await

Promise Promise是什么 ?为什么有Promise?Promise是做什么的? Promise是什么 ? 我们先在控制台输出console.dir(Promise)看看Promise 是什么 由上可以清楚的知道Promise其实是一个构造函数, 自己身上有all、reject、resolve这些方法,原型上有then、catch这些方法。这么说用Promise new出来的对象肯定就有then、catch方法。 为什么有Promise?Promise有什么用? 为什么有Promise? 因为异

TXW6666的博客 525

Promise和async/await

摘要: async/await是Promise的语法糖,两者均用于处理异步操作,但语法和可读性不同。Promise通过.then()和.catch链式调用,适合简单异步逻辑;async/await以同步方式编写异步代码,通过try/catch处理错误,提升复杂逻辑的可读性。async/await默认串行执行,但结合Promise.all()可实现并行。性能差异微小,实际开发中async/await更推荐,尤其需处理多异步任务时。两者本质相同,选择取决于代码清晰度需求。

lf_1234的博客 921

鸿蒙 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
上一篇: vue2 vue-cli vue-router vuex
下一篇: 防抖与节流
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值