初次接触Promise异步编程

JavaScript异步编程:从Promise到async/await的完整指南 在JavaScript开发中,异步编程是处理耗时操作、提升应用响应性的核心技术。其核心原理在于JavaScript的单线程模型,通过事件循环和任务队列机制,将耗时任务(如网络请求、文件读写)交由浏览器或Node.js的底层API处理,主线程得以继续执行其他代码,待任务完成后再通过回调函数或Promise处理结果。这种机制的技术价值在于解决了同步阻塞导致的界面卡顿问题,极大提升了用户体验和程序效率。在实际应用场景中,从早期的回调函数到ES6引入的Promise,再到ES8的async/await语法糖,异步编 阅读详情

首先看下面这段动画的原始的callback写法:

var ball1 = document.querySelector('.ball1');
    var ball2 = document.querySelector('.ball2');
    var ball3 = document.querySelector('.ball3');
    function animate(ball, distance, callback){
        setTimeout(function(){
           var marginLeft = parseInt(ball.style.marginLeft, 10)
           if (marginLeft === distance) {
              callback && callback()
           }
           else {
             if (marginLeft < distance) {
                marginLeft = marginLeft + 2
             } else {
                marginLeft --
             }
             ball.style.marginLeft = marginLeft + 'px'
             animate(ball, distance, callback) 
           }

        }, 13)
    }

    animate(ball1, 100, function(){
        animate(ball2, 200, function(){
            animate(ball3, 300, function(){
              animate(ball3, 150, function(){
                animate(ball2, 150, function(){
                   animate(ball1, 150, function(){
                     //结束
                   })
                })
              })
            })
        })
    })

改为promise写法为:

首先要按装bluebird依赖 npm install bluebird

var ball1 = document.querySelector('.ball1');
    var ball2 = document.querySelector('.ball2');
    var ball3 = document.querySelector('.ball3');
var Promise = window.Promise
    function promiseAnimate(ball, distance){
      return new Promise(function(resolve, reject){
           function _animate(){
             setTimeout(function(){
             var marginLeft = parseInt(ball.style.marginLeft, 10)
             if (marginLeft === distance) {
                resolve && resolve ()
             }
             else {
               if (marginLeft < distance) {
                marginLeft = marginLeft + 3
               } else {
                marginLeft --
               }
               ball.style.marginLeft = marginLeft + 'px'
               _animate() 
             }
         }, 13)
       }
       _animate()
      })
    }
    promiseAnimate(ball1, 100)
     .then(function(){
      return promiseAnimate(ball2, 200)
     })
     .then(function(){
      return promiseAnimate(ball3, 300)
     })
    .then(function(){
      return promiseAnimate(ball3, 150)
     })
     .then(function(){
      return promiseAnimate(ball2, 150)
     })
     .then(function(){
      return promiseAnimate(ball1, 150)
     })
JS高级-Promise系列详解 Promise是ES6之后新增的一个重要知识点(也可以说是最重要的知识点之一),是每个前端开发都必须要掌握的知识点,因为这与我们正式编写项目时,需要与后端交互的网络请求息息相关但是对于Promise的学习来说,很多同学会觉得有点迷茫,刚开始不知所云、困难重重在本章节中,我们会认识Promise究竟是一个怎么样的API,在Promise出现之前,我们都是怎么进行书写的,以及当Promise出现后,都有哪些方法以及如何使用Promise的类方法与对象方法有什么区别,为什么要区分开为两种方法? 阅读详情

相关推荐

保姆级教程:用VESTA软件5分钟搞定纳米颗粒Wulff Construction建模(以Au金为例)

本文提供了一份详细的VESTA软件教程,指导用户如何在5分钟内完成纳米颗粒Wulff Construction建模,特别以金(Au)为例。从环境搭建、基础晶体结构创建到Wulff Construction设置和可视化优化,涵盖了全流程操作步骤和常见问题解决方案,适合科研新手快速上手。

weixin_29311017的博客 436

你真的会用 Promise 吗?

前言:回调地狱 试想一下,有 3 个异步请求,第二个需要依赖第一个请求的返回结果,第三个需要依赖第二个请求的返回结果,一般怎么做? try{ // 请求1 $.ajax({ url: url1, success: function(data1){ // 请求2 try{ $.ajax({ url: url1, ...

weixin_33842328的博客 247

倍福 MODBUS TCP/IP通信

(*默认字符串80字节,此处声明为255字节,可以一次性传42个UINT数据.5位整数加一个空格,即每个数据6字节*)(*---------------------------------------- 以下为用户程序 ----------------------------------------*)(*读回并换算后的值*)(*准备写到PLC的值*)(*用于比较两次读回的值相差多少,以估计通讯的速度, Act_CalcDiff*)(*用于切换读和写,Act_Protocal*)

qq_33280096的博客 1367

Promise实现原理(附源码)

本篇文章主要在于探究 Promise 的实现原理,带领大家一步一步实现一个 Promise , 不对其用法做说明,如果读者还对Promise的用法不了解,可以查看阮一峰老师的ES6 Promise教程。   接下来,带你一步一步实现一个 Promise   1. Promise 基本结构     new Promise((resolve, reject) =&gt; {   set...

octopus的专栏 803

永磁同步电机控制笔记:foc控制原理通俗讲义

引言 到此为止,永磁同步电机控制相关文章已经写了7篇,其中simulink仿真系列文章5篇,控制笔记系列文章2篇,恍惚间感觉少了一篇概论,在此插入一篇,也算是对入坑电机控制一年半来的知识梳理。 文章目录引言一、同步电机是怎么转起来的二、什么样的旋转磁场效率最高三、怎么精准控制旋转磁场的方向四、怎样调节dq轴电流 一、同步电机是怎么转起来的 永磁同步电机结构如下: 外围是定子绕组,中间为永磁体,设...

搞电机的博客 2万+

视频帧插学习(三):ema-vfi代码拆解和分析

video interp EMA-VFI

mikhailbran的博客 709

小程序把接口 Promise 化

小程序把接口 Promise 化 在使用小程序接口的时候我们发现小程序的接口都是使用 success 和 fail 进行请求成功和失败处理的。习惯了用 Promise 处理方式后发现这样写代码有点不美观(容易形成回调地狱),并且行数也会增多。接下来就来讲讲如何把小程序接口 Promise 化。 1、首先,我们要明确我们要解决的目的:把小程序接口 Promise 化。 2、 然后我们想象一下我们要实...

Insist_bin的博客 593

5G-A无源物联网:深度解析“不插电“智能的底层技术原理

北京移动推出5G-A无源物联网技术,实现电动车标签"零功耗"运行。该技术通过射频能量收集(利用5G-A基站高功率信号转换为电能)和反向散射通信(调制反射信号传输数据)两大核心技术,使设备无需电池即可工作。5G-A相比4G在信号能量密度、通信速率和定位精度等方面显著提升,结合通感一体等创新技术,为无源物联网提供商用基础。该方案已在北京小区试点应用,实现电动车精准定位管理,标签寿命可达5年以上。专家预测,这项技术将大幅降低物联网部署成本,推动"万物智联"时代的到来。

通信行业老兵、物联网从业者,做一个有趣的普通人。 2013

Promise难懂?一篇文章让你轻松驾驭

前端js学习中,让大家最难受的就是异步的问题,解决异步、回调地狱等问题时你必须得学会promise,对于多数前端程序员来说promise简直就是噩梦,本篇文章就是从通俗易懂的角度做为切入点,帮助大家轻松掌握promise。

前端小白在前进的博客 7万+

记一次完整的RPG Maker MV游戏逆向过程(思路一)

了解RPG Maker MV的文件建构 上一篇文章,我们已经成功在PC上运行了游戏,那我们如何对游戏进行逆向呢? 首先要了解正常的RPG Maker MV制作的游戏应该具有哪些文件,以及他的结构 那如何了解他的结构呢,很简单,我们只需要用RPG Maker MV创建一个默认工程,来看看一个游戏的最简结构是怎么样的 创建新项目 项目创建完成 查看项目目录结构 是不是和之前解包出来的很像呢? 通...

Ciiiiiing的博客 1万+

Autosar Dcm配置-App到Boot的跳转及1002回复配置及实现-基于ETAS软件

在软件刷写流程中,上位机(诊断仪)发送1002后,APP检查允许跳转boot后,在特定的ram(软复位不清除)写入指定置后通过触发软件复位来跳转到boot的。在APP跳转到Bootloader时,1002的回复有两种方式,一种是APP直接回复,然后跳转,另一种是APP回复NRC78,然后跳转,在Boot中回复。本文介绍这两种方式的实现。如果是在APP中回复,可以少发一个0x78,整体跳转时间可能会少一些。但是如果诊断在收到5002之后立马请求其他的服务,可能出现boot正在初始化而未正常接收到报文。

赞的博客 1557

从回调到 Promise:异步编程进化史

异步编程进化史

欢迎来到这里,希望文章能对你有所帮助 1199

Trae+雪球MCP,化身专业的股票分析师(玩转100个MCP系列第二弹)

大家好呀,我是程序员夏叶,深度AI编程使用者,专注于分享AI编程方面的使用技巧、经验以及前沿资讯,有兴趣的可以关注我的公众号,一起学习,共同进步。第二弹,使用Trae+雪球MCP,获取股票实时行情,分析股票走向等,写代码间隙看看股票价格,研究研究行情,哈哈。真的很不错呀,最关键的是,足够隐蔽,同事以为你在写代码,实际你在浏览股票行情,哈哈,感兴趣的可以试一下哦。说实话,沧州明珠这只股我算是砸手里了,不过还好买的不多,哈哈。

cpp加油站的专栏 518

JavaScript异步编程:Async、await与Promise

JavaScript异步编程

m0_47584501的博客 3789

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Promise 异步编程

ES6

m0_44973790的博客 478

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

从 Promise 到 Axios:轻松解锁异步编程

Promise 虽然解决了回调嵌套的问题,但链式调用依然可能让代码变得不够直观。本文将带你一步步深入了解,帮助你弄清它们的背景、解决的问题以及实际应用。当任务需要按照一定顺序完成时,这种嵌套写法会变得非常混乱,特别是任务之间还需要处理错误或者传递结果的时候。如果你正在开发中处理异步任务,比如网络请求、文件操作,或者用户交互的处理,那么你一定接触过。是一个基于 Promise 的 HTTP 库,它让网络请求变得更加优雅。还支持链式调用,上一个处理返回的成功的结果可以传递给下一个。捕获到,整个异步函数将。

Yan.love的博客 1447

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JavaScript异步编程1——Promise的初步使用

通过Promise的初步使用,对JavaScript的异步编程有了一个初步的认识。

Charlee44的技术驿站 282

前端异步编程基础

本文主要介绍回调函数,Promise,aysnc/wait这三种异步机制,顺便说说axios

罗不丢的博客 1427

【大前端系列19】JavaScript核心:Promise异步编程与async/await实践

本文是《全栈进化:大前端开发完全指南》系列的第19篇,深入探讨Promise异步编程与async/await实践。系统讲解Promise的设计理念、工作原理、链式调用等核心特性,同时详解async/await语法如何简化异步操作,并通过丰富示例演示实际应用场景与优化技巧。

秦若宸 - 全栈工程师,擅长前端技术与架构设计。 960

鸿蒙异步编程:从Promise到async/await实战

异步编程是现代应用开发的核心技术,通过非阻塞I/O操作提升应用响应速度。其原理基于事件循环机制,将耗时操作放入后台线程执行,避免阻塞主线程。在鸿蒙开发中,Promise作为基础异步模型,通过状态机管理操作生命周期(pending/fulfilled/rejected),而async/await语法糖则让异步代码具备同步代码的可读性。典型应用场景包括网络请求、文件读写等I/O密集型任务。本文以鸿蒙OS为例,详解如何通过Promise链式调用处理多级依赖的异步操作,并利用async/await优化天气应用等实际

weixin_33290540的博客 249

Promise入门指南:零基础也能懂的异步编程

比如,平台会提示"别忘了在每个then()中return值,否则下一个then()会收到undefined"这样的实用建议。上,不需要配置任何环境,打开网页就能开始练习,这种零门槛的体验真的很适合初学者。上尝试了一个Promise的交互式学习项目,才真正理解了它的工作原理。最让我惊喜的是,平台提供了实时预览功能,可以立即看到代码执行结果,这对于理解Promise的执行顺序特别有帮助。这个过程中,Promise就像那张小票,它代表着一个"未来值"——可能是做好的牛排,也可能是无法提供的通知。

CrystalwaveEagle34的博客 676

FutureKit:Swift异步编程的终极指南 - 从零开始掌握Future/Promise

在iOS和macOS开发中,异步编程一直是开发者面临的挑战之一。FutureKit作为一款纯Swift编写的Future/Promise库,为Swift开发者提供了强大而优雅的异步编程解决方案。无论你是刚刚接触异步编程的新手,还是希望优化现有代码架构的资深开发者,FutureKit都能帮助你轻松处理复杂的异步操作,让你的代码更加清晰、可维护。 ## 🔥 什么是FutureKit? Futur

gitblog_00227的博客 946

JS/TS 异步编程完全指南:从 Promise 到 async/await

Promise 是 JavaScript 处理异步操作的标准方案,就像 Java 中的// Promise 的三种状态// 异步操作,比如数据库查询、网络请求resolve("操作成功!");// 进入 fulfilled 状态} else {reject(new Error("操作失败!"));// 进入 rejected 状态}, 1000);});// 初始状态: pending// 成功状态: fulfilled// 失败状态: rejected// 1. 基本类型。

weixin_43069385的博客 322

Promise难懂?一篇文章让你轻松驾驭_promise也不太懂

上边说到Promise是一个构造函数,new之后等于说调用了构造函数,构造函数中传的参数是一个函数,这个函数内的两个参数分别又是两个函数(),我们最后想要拿到第二个接口的结果,于是又有了一个then方法,但是在第一个then方法中要把一个新的Promise实例。加载页面,等数据返回完后,loading加载页面会消失,整个页面就展现出来了,增强用户的体验。的状态了,代码体验非常的不良好,看一会就给看懵了,为了解决这个问题,于是,就引入了我们的。),并且这个函数在外部函数内被调用,用来完成某些任务的函数。

2401_89317420的博客 734

手写Promise核心实现与异步编程原理

Promise作为现代JavaScript异步编程的核心概念,本质上是一个具有三种状态(pending、fulfilled、rejected)的状态机。其设计遵循Promise/A+规范,通过then方法实现链式调用,有效解决了回调地狱问题。从技术实现角度看,Promise利用了事件循环中的微任务队列机制,保证异步回调的执行时序。理解Promise的工作原理对于掌握async/await语法糖至关重要,也是前端工程实践中处理复杂异步流程的基础。通过手写实现Promise,开发者可以深入理解执行器函数、状态转

weixin_30536861的博客 334

无名杀开发者进阶:掌握Promise与异步编程的终极指南

在无名杀(noname)游戏开发中,异步操作无处不在——从资源加载到事件处理,从网络请求到动画过渡。本文将带你系统掌握Promise与异步编程的核心技巧,让你的代码更高效、更健壮。无论你是刚接触无名杀开发的新手,还是想优化现有代码的开发者,这些最佳实践都能帮你写出更专业的异步逻辑。 ## 为什么异步编程对无名杀开发至关重要? 无名杀作为一款复杂的卡牌游戏,包含大量并发操作:角色技能的触发、动画

gitblog_00186的博客 987
上一篇: 学习node.js(一)
下一篇: 学习node.js(二)—— Buffer
景洪在编程
博客等级 码龄9年 13粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值