首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript Then() Promise不是异步工作的

JavaScript中的Promise是一种处理异步操作的机制。Promise对象代表一个尚未完成但最终会完成的操作,并可以获取其结果或错误信息。

在JavaScript中,异步操作通常是通过回调函数来处理的,但这种方式容易导致回调地狱(callback hell),代码可读性差且难以维护。而Promise通过链式调用的方式,使得异步操作的处理更加直观和简洁。

Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当一个Promise对象处于pending状态时,可以通过调用其then()方法来注册回调函数,当Promise对象状态变为fulfilled时,then()方法中的回调函数会被执行;当Promise对象状态变为rejected时,then()方法中的第二个回调函数(可选)会被执行。

then()方法返回一个新的Promise对象,因此可以通过链式调用多个then()方法来处理多个异步操作。这种方式可以避免回调地狱,并且使得代码更加清晰和易于维护。

Promise的优势在于:

  1. 更好的代码可读性和维护性:通过链式调用的方式,使得异步操作的处理更加直观和简洁。
  2. 更好的错误处理:Promise提供了catch()方法来捕获和处理错误,使得错误处理更加方便。
  3. 更好的异步流程控制:Promise可以通过Promise.all()、Promise.race()等方法来控制多个异步操作的执行顺序和并发性。

Promise的应用场景包括但不限于:

  1. 异步请求:例如发送HTTP请求获取数据。
  2. 定时任务:例如延迟执行某个操作。
  3. 文件读写:例如读取文件内容或将数据写入文件。
  4. 动画效果:例如在动画完成后执行某个操作。

腾讯云提供了云函数SCF(Serverless Cloud Function)服务,可以用于执行无服务器的JavaScript代码。通过SCF,可以将JavaScript代码部署到云端,并通过事件触发执行,实现异步操作的处理。

更多关于腾讯云云函数SCF的信息,请参考:腾讯云云函数SCF

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

javascript异步promise

我们说处理javascript异步最常用方式就是通过回调函数,对于回调函数我们昨天对此做了介绍 简单快速, 我们一般使用嵌套回调或者链式回调,会产生以下问题 当采用嵌套回调时,会导致层级太多,不利于维护...,就会存在隐患,当在团队协作时候,显得编码规范显得尤为重要 本文不重点介绍如何使用promise,重点介绍promise解决了哪些异步回调出现问题。...和rejected(已失败)(一旦状态改变,就不会再变) 回调函数调用过早 调用过早就是将异步函数作为同步处理了, 我们之前说过,javascript以单线程同步方式执行主线程,遇到异步会将异步函数放入到任务队列中...直接手动是promise状态切为成功状态,console.log("我是异步执行");这段代码也是异步执行 提供给then()回调永远都是异步执行,所以promise中不会出现回调函数过早执行情况...回调函数调用过晚或不被调用 回调函数调用过晚 回调函数调用过晚处理原理和调用过早很类似, 在promisethen()中存放着异步函数,所有的异步都存在于js任务队列中,当js主线程执行完毕后

88140

JavaScript异步编程之Promise

Promise 一种更优异步编程统一 方法,如果直接使用传统回调函数去完成复杂操作就会形成回调深渊 // 回调深渊 $.get('/url1'() => { $.get('/url2'() =...,在jqeury中也有链式调用,jquery中是返回了本身这个对象所以可以实现链式调用,那么在Promise中是不是这样呢 let promsie1 = ajax('/json1.json')...对象,这个方法会返回一个全新Promise对象,与他们不同是无论这些Promise执行是成功还是失败都是等这些Promise都完成了之后才会完成,当有多个彼此不依赖异步任务成功完成时,或者总是想知道每个...// 5. promise3 // 6. settimeout 没想到吧,Promise异步时序执行有点特殊。...,目前绝大多数异步调用都是作为宏任务执行。

63570

JavaScript异步编程3——Promise链式使用

概述 在上一篇文章《JavaScript异步编程2——结合XMLHttpRequest使用Promise》中,简要介绍了Ajax与Promise结合使用。...这样,我们就有了两个异步操作例子:读取一个json文件;通过一个地址加载图像。...,加载图像异步操作在XMLHttpRequest访问请求响应回调中实现,这样可以让访问json请求结束了之后立刻去访问图像操作。...2️⃣Promise实现 为了解决“回调地狱”问题,Promise应运而生。在之前文章中说过,Promise目的,是希望异步行为能像同步操作一样遵循顺序,从而避免嵌套回调。...也就是说,只要在每次成功实现,也就是then()方法中,再次返回新Promise对象,就可以再次调用该Promise对象then()方法,这样异步行为也就可以像同步操作那样,按顺序组合起来了。

82320

javascript异步Promise.all()、Promise.race()、Promise.finally()

今天我们继续讨论promise 网络上关于PromiseAPI使用文章多如牛毛,为了保持javascript异步系列文章完整性,现在对promiseAPI进行简单全面的介绍 准备工作 我在easy-mock...Promise.all就是用于将多个 Promise 实例,包装成一个新 Promise 实例 Promise.all,接收一个数组作为参数,数组每一项都返回Promise实例 我们重点看这段代码...三个promise实例参数之间是“与”关系,全部成功,Promise.all就返回成功,有一个失败,Promise.all就返回失败 换个角度说,一个promise执行结果依赖于另外几个promise...,用法和Promise.all类似,对应参数要求和Promise.all相同,传入一个数组作为参数,参数要返回一个Promise实例 race就是竞争意思,数组内Promise实例,谁执行快,就返回谁执行结果...ajax请求时长划定范围,如果ajax请求时长超过xxxms会执行某个方法,或者ajax请求时长不超过xxms会执行某个方法,总之,race应用空间不是很大 Promise.finally() finally

2.3K30

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

概述 Promise对象是ES6提出异步编程规范。说到异步编程,就不得不说说同步和异步这两个概念。...事件循环机制将UI设备输入输出规定为事件,实际上,耗时行为非常多,但是一般都与IO相关,与IO相关行为,JavaScript都提供了异步行为代码。例如,这里要用一个加载图片实例。 2...., error); }) }); 粗看起来,使用Promise,似乎使得程序显得更加复杂和繁复了。但是我们要深入理解Promise机制内涵,这样设计并不是为了好玩。...可以看到,这样设计看起来很繁复,但是却很像是一个同步行为:规定一个未完成行为对象,行为完成了如何处理,行为失败了又如何处理。而这也是Promise目的:使得异步操作更像是一个同步行为。 3....参考 同步(Synchronous)和异步(Asynchronous) 简述JS单线程异步实现原理 JavaScript 运行机制详解:再谈Event Loop

72140

JavaScript 异步编程指南 — Give me a Promise

这句话形式 Promise 还挺有意思,文中我会在提及! 随着 ES6 标准出现,给我们带来了一个新异步解决方案 Promise。...目前绝大多数 JavaScript 新增异步 API 无论是在浏览器端还是 Node.js 服务端都是基于 Promise 构建,以前基于 Callback 形式也有解决方案将其转为 Promise...API 提供了一组备用异步文件系统方法,它们返回 Promise 对象而不是使用回调。...也许某些时候我们需要一个总是能够被调用回调,以便做一些清理工作,ES7 新加入了 finally 也许是你不错选择。...console.log('reject'); }); 使用 Promise 改造 Callback 回调地狱示例 这是我们之前在讲解 JavaScript 异步编程指南 Callback

1.1K10

《现代Javascript高级教程》JavaScript异步编程与Promise

现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 JS中异步编程与Promise 一、JavaScript异步编步机制 在了解JavaScript异步机制之前,...五、Promise发展 Promise 对象代表一个异步操作最终完成(或失败)及其结果值。一个 Promise 处于以下状态之一: pending: 初始状态,既不是成功,也不是失败状态。...Promise 主要解决了两类问题: 异步操作一致性问题:无论异步操作是同步完成还是异步完成,使用 Promise 对象 then 方法都可以以同样方式进行处理。...我们可以通过下面的代码示例来看一下 Promise 是如何工作: let promise = new Promise(function(resolve, reject) { // 异步处理 /...以上是关于 JavaScript异步编程、事件循环、任务队列、宏任务、微任务,以及requestAnimationFrame在事件循环位置,Promise 发展和如何解决回调地狱详细介绍。

19620

JavaScript异步编程4——Promise错误处理

概述 在上一篇文章《JavaScript异步编程3——Promise链式使用》中,通过Promise链式使用,避免程序中多次嵌套回调(回调地狱)。...根据前面的文章我们可以知道,Promise是基于状态,成功/失败状态会分别去处理相应回调函数。一般而言,失败状态我们希望能够捕获它,将它像异常(Error)一样处理。 2....详论 Promisethen()方法有两个参数,一个是成功回调函数,一个是失败回调函数。可以将失败回调函数这个参数省略掉,而使用Promisecatch()方法,捕获失败异常。...前者通过Promisethen()处理异常,只会运行功能回调函数和失败回调函数其中一个;后者通过catch()处理异常,则更加像JavaScripttry/catch,在try{}中发生错误会立即转到...这样的话,就很容易实现类似于try/catch异常操作非阻塞异步版本: $(function () { function get(url) { return new

62720

Javascript异步回调细数:promise yield asyncawait

所以在此谈下JS异步回调:promise yield async/await对本篇基础知识,安利下:《弄懂javascript执行机制:事件轮询|微任务和宏任务|定时器》《浏览器层面优化前端性能(...如果这个值是一个 promise ,那么将返回这个 promise ;当你数据不是promise实例,或者你不知道他是不是promise,而你又想把他当做promise实例来使用时候,比如:Promise.resolve...如果reject resolve 包含在异步函数里面,如setTimeout,则先执行同步模块,在执行异步,最终执行 then内 reject resolve 函数,关于执行顺序,可参考《弄懂javascript...await后面调用函数需要返回一个promise,另外这个函数是一个普通函数即可,而不是generator。函数体内return值,将会作为这个Promise对象resolve时参数。.../a/1190000023586499转载本站文章《Javascript异步回调细数:promise yield async/await》,请注明出处:https://www.zhoulujun.cn/

66600

JavaScript异步编程2——结合XMLHttpRequest使用Promise

概述 在上一篇文章《JavaScript异步编程1——Promise初步使用》,简单介绍了一下Promise初步使用。...Promise对象参数也是一个function B,内部进行了一个异步操作(通常是JavaScript提供API)。 function B对象参数是两个回调函数resolve和reject。...这两个例子都是将事件改造成Promise,那不是意味着对于异步编程而言,Promise要优于事件呢? 不能完全这么肯定,但是可以确定是事件并不总是异步编程最优实践。...一个很显然问题就是:事件很适合处理在同一对象上多次发生事情,但是事件侦听器响应函数可能并不是我们想要——更多情况下,我们只想要直到两个状态,当异步操作完成时候该做什么,当异步操作失败时候又该做什么...使用Promise,可以更准确进行异步行为。 3. 参考 Ajax原理-原生jsXMLHttpRequest对象意义 Javascript异步编程4种方法

95510

理解javascript异步编程中promise可以很简单

一贯以来我都是用自己写AppSiteJS框架在写web前台功能,很少去涉及到异步编程,一般来说也就只是在XMLRequest( Ajax )时候会用。...而在开发chrome插件时候,几乎所有的api都是异步API,在第一时间时候还是让我有些不适应。 但是很多时候理解一个技术或者说模式,最重要不是强迫自己去理解很多别人说明、解释或者说代码。...我们在进行同步编程时候 每一个后续步骤都依赖于前一步计算或结果(返回值),如果其中一个过程出现问题,那后续工作也无法继续了。 换言之,我进行后续工作时候肯定已经获得了前一步结果了。...来看一段示例代码: // 购物异步编程 仅供参考 完全不严谨!...,而我们在调用时候就很简单了 购物( 订单 ).then( 发快递 ).catch( 弹窗提示 ); 是不是感觉打开了新世界,因为发快递之后事情我都不用管了,放权也是很爽

32530

javascript基础修炼(7)——Promise异步,可靠性

开发者javascript造诣取决于对【动态】和【异步】这两个词理解水平。 ? 一....别人是开发者,你也是 Promise技术是【javascript异步编程】这个话题中非常重要,它一度让我感到熟悉又陌生,我熟悉其所有的API并能够在编程中相对熟练地运用,却对其中原理和软件设计思想感到陌生...但事实上Promise设计初衷并不是为了实现异步,而且很多开发者并没有意识到,回调并不意味着异步!!!(你传入另一个函数回调函数有可能被异步执行,也有可能被同步执行)。...这个问题是在笔者学习完EventLoop和Generator函数相关知识后才理解,其实Promise本身并没有实现异步javascript语言中异步都是通过事件循环机制(《javascript...链式调用实现,实现了Promise多步骤流程控制功能,对一个多于两个步骤流程中,即使没有实现链式调用,Promise实际上依然可以工作,但当你真的那样做时,你会发现它又变成了一个新回调地狱。

59950

JavaScript 异步编程指南 — 你不知道 Promise 前世 Deferred

这是一个系列文章,你可以关注公众号「五月君」订阅话题《JavaScript 异步编程指南》获取最新信息。...Promise 是现代 JavaScript 比较重要一个核心概念,也许你会疑问为什么会提到 Deferred?这个是什么?...社区,之后一直由 Node.js 基金会管理,如今已经 2021 年了,Node.js 本身也发生了很多变化,包括文件操作也为我们提供了基于 Promise 形式 API,Stream 目前也很好支持异步迭代...了解 Promise 应该能看出是不是有点感觉像?...; }) 是不是更像 Promise 了? 封装一个自己 Deferred 对象 deferred 对象执行将状态分为三个:未完成、已完成、已失败。

96310

javascript异步编年史,从“纯回调”到Promise

异步和分块——程序分块执行 一开始学习javascript时候, 我对异步概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任把笼统描述混杂在一起,让我对这个 JS中重要概念难以理解...: 假设ajax执行能像一个同步执行foreach函数执行那样迅速, javascript又何苦对它做一些异步处理呢?...就是因为它如此耗时, 所以javascript“审时度势”, 拿出了“异步这一把刷子,来解决问题 正因为有“非阻塞”刚需, javascript才会对ajax等一概采用异步处理 “因为要非阻塞,...() => {  console.log('我是异步')  },0 ) console.log('我是同步') 有经验JS老司机们一眼就能看出, 一定是输出 我是同步 我是异步不是 我是异步...Promise好像也不是特别革命性一个新东西嘛!

1.1K80

深入浅出Promise,循序渐进掌握JavaScript异步编程

Promise基本用法PromiseJavaScript 中处理异步操作一种方式。它是一个对象,代表了一个异步操作最终完成或失败结果。...Promise异步编程场景以下是一些Promise异步编程场景例子:1.发起网络请求:当需要从服务器获取数据时,可以使用 Promise 来发起异步网络请求。...Promise影响 Promise 出现对JavaScript编程带来了以下几个重要贡献:处理异步操作:JavaScript是单线程异步操作处理一直是发者们头疼问题。...通过将异步操作按照顺序连接起来,能够更好地组织,易于理解和维护。总的来说, Promise 出现使得JavaScript在处理异步操作方面变得更加简洁、可读、可维护,提高了开发效率和代码质量。...它改变了JavaScript编程方式,成为现代异步重要工具之一。五.

37310

JavaScript return await promise 与 return promise

原文地址:'return await promise' vs 'return promise' in JavaScript 原文作者:Dmitri Pavlutin 译文出自:掘金翻译计划 当从异步功能中返回时...相同行为 为了找到两个表达式(与)区别,(return await promise vs return promise), 我要使用辅助功能。 delayedDivide(n1, n2)....该函数除以 2 个数字,并返回以承诺包裹分区结果: function promisedDivision(n1, n2) { if (n2 === 0) { return Promise.reject...catch(error) { ... } 现在,您可以轻松地看到使用和:return await promisereturn promise 当被包裹起来时,附近渔获物只有在等待承诺时才会被拒绝(这是事实...return await promisereturn promise 但是,如果你想抓住拒绝承诺,你从异步功能返回,那么你绝对应该使用表达和故意添加。

2K20

JavaScript Promise 使用技巧

“生产代码”是可能需要一些时间来执行代码。 “消费代码”是必须等待结果代码。 Promise 是一个 JavaScript 对象,它链接生产代码和消费代码。...然后 then 指定回调函数被异步调用,注意 Chrome 里提示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gClCUMmg-1660268588108)(...imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)] 当 Promise 对象处于 pending(工作)状态时,结果是未定义。...开发人员无法访问 Promise 属性状态和结果,必须使用 Promise 方法来处理 Promise。 看一个包含 UI 例子。 Promise异步代码封装起来。...这就是一个异步操作了。执行结束后,通过 resolve 通知 then 注册回调函数。

82730
领券