promise

Promise详解-1:初识Promise 不懂Promise?看这篇教程就够了 阅读详情

Promise

  • 基本使用

    //resolve和reject是JavaScript引擎提供的两个函数
    const promise = new Promise(function(resolve, reject) {
      // ... some code
    
      if (/* 异步操作成功 */){
        resolve(value);
      } else {
        reject(error);
      }
    });
    
    //用then方法分别指定resolved状态和rejected状态的回调函数
    promise.then(function(value) {
      // success
    }, function(error) {
      // failure
    });
    

    then方法可以接受两个回调函数作为参数,第一个回调函数是promise对象的状态变成resolved时调用,第二个回调函数是promise对象的状态变成rejected时调用,第二个函数是可选的,不一定提供。这两个函数都接受promise对象传出的值作为参数。

    function timeout(ms){
        return new Promise((resolve,reject)=>{
            setTimeout(resolve,ms,'done');
        });
    }
    timeout(100).then((value)=>{
        console.log(value);
    });
    

    promise新建后就会立即执行

    let promise = new Promise(function(resolve,reject){
        console.log('Promise');
        resolve();
    });
    promise.then(function(){
        console.log('resolved.');
    });
    console.log('Hi!');
    

    代码执行后,输出顺序如下:

    Promise

    Hi!

    resolved.

    异步加载图片的例子

  function loadImageAsync(url){
      return new Promise(function(resolve,reject){
          const image = new Image();
          image.onload = function(){
              resolve(image);
          };
          
          image.onerror = functioin(){
              reject(new Error('Could not load image at'+url));
          };
          image.src = url;
      });
  }

以上代码,使用Promise包装了一个图片加载的异步操作。如果加载成功,就调用resolve方法,否则就调用reject方法。

promise对象实现的AJAX操作的例子

  const getJSON = function(url){
      const promise = new Promise(function(resolve,reject){
          const handler = function(){
              if(this.readyState !== 4){
                  return;
              }
              if(this.status === 200){
                  resolve(this.response);
              } else {
                  reject(new Error(this.ststusText));
              }
          };
          cosnt client = new XMLHttpRquest();
          client.open("GET",url);
          client.onreadystatechange = handler;
          client.responseType = 'json';
          client.setRequestHeader('Accept','application/json');
          client.send();
      });
      return promise;
  };
  getJSON('/posts.json').then(function(json){
      console.log('Contents:'+json);
  },function(error){
      console.log('出错了',error);
  });

getJSON是对XMLHttpRequest对象的封装,用于发出一个针对JSON数据的HTTP请求,并且返回一个promise对象。

一般来说,调用resolve或reject以后,promise的使命就完成了,后续操作应该写在then方法里面,而不是直接写在resolve或reject的后面。所以最好在它们前面加上return语句,这样就不会有意外

  new Promise((resolve,reject)=>{
      return resolve(1);
      //后面的语句不会执行
      console.log(2);
  });
  • 状态

    三种状态:pending(进行中)、fufilled(已成功)、rejected(已失败)

    只能从第一种状态到第二或第三种状态,状态一旦改变,就不会再变了

  • 常用方法

    • Promise.all

    Promise.all方法用于将多个promise实例,包装成一个新的Promise实例。

    const p = Promise.all([p1,p2,p3]);
    

    p的状态由p1、p2、p3决定,任意一个被rejected,p的状态就会变成rejected,否则会变成fullfilled状态。

    • Promise.race

    Promise.race方法用于将多个promise实例,包装成一个新的Promise实例。

    const p = Promise.race([p1,p2,p3]);
    

    只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

    • promise和generator的结合

      function getFoo(){
          return new Promise(function(resolve,reject){
              resolve('foo');
          });
      }
      const g = function* (){
          try{
              const foo = yield getFoo();
              console.log(foo);
          } catch (e){
              console.log(e);
          }
      }
      function run (generator){
          const it = generator();
          function go(result){
              if(result.done) return result.value;
              return result.value.then(function(value){
                  return go(it.next(value));
              },function(error){
                  return go(it.throw(error));
              });
          }
          go(it.next());
      }
      run(g);
      

​ 以上代码的generator函数g之中,有一个异步操作getFoo,它返回的就是一个promise对象。函数run用来处理这个promise对象,并调用下一个next方法

promise核心总结 阅读详情

相关推荐

Promise的使用总结

Promise 是 JavaScript 中用于处理异步操作的一种机制。它提供了一种更清晰和更简洁的方式来处理异步代码,避免了回调地狱。以下是 Promise 的使用方法,包括创建 Promise、链式调用、错误处理、并行执行等。

yiguoxiaohai的博客 1761

Promise

Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的 API,各种异步操作都可以用同样的方法进行处理。Promise对象有以下两个特点。(1)对象的状态不受外界影响。

m0_74316302的博客 2773

总结一下 Promise,怎么使用,如何手写 promise

Promise 是 JavaScript 中的一个异步编程解决方案,它代表了一个最终可能完成(或失败)及其结果值的异步操作。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise 一旦从 pending 状态变为 fulfilled 或 rejected 状态,状态就不会再改变,即 Promise 的状态是不可逆的。

读心悦 1119

关于 Promise

如果有任何请求失败,则整体失败。处理方式只返回成功的结果。一旦有任何一个 Promise 被拒绝,整个会立即失败,并返回那个被拒绝的 Promise 的错误。返回值返回一个包含所有成功结果的数组。如果有一个或多个请求失败,则不会返回结果,而是直接进入catch块。使用场景在你只关心所有请求都成功的情况下,适合用于并行处理需要全部成功才能继续的场景。处理方式所有请求都会被处理,不管成功与否,最终返回所有请求的状态和结果。

weixin_58467091的博客 2565

从零到一:龙芯杯参赛全攻略(含北理工学长经验PDF、B站培训视频与开源代码合集)

本文详细介绍了龙芯杯全国大学生计算机系统能力大赛的参赛全攻略,包括资源整合、技能树构建、团队协作和避坑指南。提供北理工学长经验PDF、B站培训视频与开源代码合集,帮助参赛者从零基础到站上领奖台。重点解析如何高效获取优质资源、避开新手常见陷阱及构建可落地的学习路径,助力普通学生系统学习CPU设计。

weixin_26802933的博客 538

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 965

总结Promise特性以及一些关于Promise的api

promise学习笔记

2301_79158740的博客 1246

Codex接入CCSwitch:本地代理与模型路由配置指南

在AI编程工具链中,本地代理与模型路由是连接智能体与模型服务的核心桥梁。Codex作为OpenAI推出的编程智能体,虽然具备强大的仓库理解和自主编码能力,但其默认模型链路固定,导致在多模型切换、内网统一管理及成本控制上存在天然瓶颈。CCSwitch正是为解决这一痛点而生的本地代理工具,它通过OpenAI兼容协议将Codex的请求透明转发至DeepSeek、通义千问等第三方模型服务,使模型切换如同点击按钮般简单。本文从本地代理和模型路由器的基础原理切入,系统讲解Codex与CCSwitch的安装配置、模型ID

weixin_33910460的博客 427

使用 Promise

Promise 是现代 JavaScript 异步编程的基础。它避免了深度嵌套回调,使表达和理解异步操作序列变得更加容易,并且它们还支持一种类似于同步编程中 try…catch 语句的错误处理方式。async 和 await 关键字使得从一系列连续的异步函数调用中建立一个操作变得更加容易,避免了创建显式 Promise 链,并允许你像编写同步代码那样编写异步代码。

歌舞阿瓜的博客 1877

ICCompiler II学习笔记(一)ICC II使用全流程 overview

学习笔记同步发布在我的个人网站上,欢迎来访查看。 个人学识有限,理解可能有误,仅供参考。 文章目录一、前言二、 ICC II 简介和 GUI2.1 Blocks 和 Design Libraries2.2 Objects2.3 Application Options三、Design Setup四、APR flow五、 课程主题:如何用 ICC II来实现最好的PPA 一、前言 现在的芯片都在追求一个极致的PPA 芯片的生成可以分为以下 5大步骤: Front-end Design:前端设计,最终产生

一名FPGA芯片设计爱好者的技术博客 2万+

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

Promise.all()与Promise.allSettled()和Promise.race() 有什么区别与联系

Promise.all()与Promise.allSettled()和Promise.race() 有什么区别与联系

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 3945

北斗导航 | 卫星导航接收机原理(基础)

卡尔曼滤波,最小二乘,伪距,芯片,模组,接收机,捕获,跟踪,RTK,RTD,PPP,SPP,多普勒,DOP,灵敏度,热启动,冷启动,PNT,北斗发展,MEO,IGSO,GEO,ICD,导航电文,载波,载噪比

尘世冰封的专栏 2340

【TypeScript】Promise 深入解析

Promise是 JavaScript 中一种用于处理异步操作的对象。它代表了一个未来才会完成的操作,通常用于网络请求、文件读取等异步操作的结果。PromisePending(待定):操作还未完成。Fulfilled(已完成):操作成功完成。Rejected(已拒绝):操作失败。在Promise完成时,我们可以通过.then()或.catch()方法来处理操作结果或错误。Promise还可以通过async和await语法来简化异步操作的处理。Promise。

lph159的博客 2541

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 206

裂缝二维检测:裂缝的长度和宽度检测

这一节,我们需要去整合一下前面的代码,在进行长度和宽度的测量时,需要裂缝的类型、个数、面积的帮助。这一章是本专栏的核心部分。以上代码我均试过,由于本人能力有限,看不懂代码,最终还是没有采用,使用的是最普通检测宽度的方法,即求得骨架总长度后,用总面积求取平均宽度。

m0_62919535的博客 4237

【Promise】promise的理解和使用

文章目录1 什么是Promise1.1 理解1.2 Promise的状态改变1.3 Promise的基本流程1.4 Promise的基本使用2 使用Promise的意义2.1 指定回调函数的方式更加灵活2.2 支持链式调用,可以解决回调地狱问题3 如何使用Promise3.1 API3.2 promise 的几个关键问题3.2.1 如何改变 promise 的状态?3.2.2 一个 promise 指定多个成功 / 失败回调函数,都会调用吗?3.2.3 改变 promise 状态和指定回调函数谁先谁后?3.

weixin_45980065的博客 2102

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

手写Promise

若要使缺乏完整 promise 实现的浏览器符合规范,或将 promise 添加到其他浏览器和 Node.js 中,请查看。​ 上面提到的库,以及ES6中实现的Promise,还有我们手写的Promise其实都是按照标准进行编写的,那么如何测试是否符合标准呢。无论是早期实现了Promise的第三方库,以及现在的新式浏览器内置的Promise,都是符合。手写Promise-链式编程-fulfilled状态-返回Promise。是社区推出的规范,最早Promise也是社区推出并实现的,旨在规范。

weixin_42782004的博客 1381

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Promise详解-2:Promise的进阶使用

不懂Promise的进阶?这篇文章直接教会你

sharkchen的专栏 1428

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

promise与 fetch、async/await

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

luemeon的博客 1244

Promise详细知识点(内含手写Promise)

promise相关知识和手写promise

ixxoic的博客 1369
上一篇: 闭包
下一篇: CSS盒模型和BFC
codezha
博客等级 码龄10年 28粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值