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

不使用回函数ajax请求实现(asyncawait简化函数嵌套

以最简单前端ajax请求为例 代码先输出1,再输出2,整个程序执行流程并未因http请求而被阻塞,函数方案完美的把问题解决。 然而,这只是最简单函数示例,假如函数嵌套了许多层呢?...虽然这种嵌套场景在web前端开发中比较罕见, 但在nodejs服务器端开发领域还是常见。 那如何克服这个问题?假如用php来写, 那便是一件很轻松事了。...先把上面用JavaScript实现多层嵌套调用同步方式来改写, 代码如下 代码由ajax和run这两个函数组成, ajax是对jquery ajax封装,使之能不使用回函数就能获得ajax响应结果...当函数被声明为async类型时,如果这个函数要有返回值 ,并且返回值要在某个函数中获得,那么这个函数返回结果就只能是一个 Promise对象,就像示例ajax函数一样,返回值如果是其它类型那就达不到期望效果...另一种方法是在调用函数时加上await关键字,await意义就在于接收async函数Promise对象中resolve和reject传递值 ,而且除非resolve和reject这两个函数函数中被调用到了

2.7K50

异步JavaScript:从地狱到异步和等待

异步JavaScript简史 第一个也是最直接解决方案是以嵌套函数形式作为这个解决方案导致了所谓地狱,而且太多应用程序仍然感到它燃烧。 然后,我们有了Promises。...记录用户应用程序访问时间。 方法1:地狱(“末日金字塔”) 对这些调用进行同步古老解决方案是通过嵌套。...拥有数百个类似代码块应用程序将给维护代码的人带来更多麻烦,即使他们自己编写代码。 一旦你意识到database.getRoles是嵌套另一个函数这个例子变得更加复杂。...这就是原生JavaScript Promises 进来原因。 JavaScript Promises Promises是逃避地狱下一个合乎逻辑步骤。...这个方法并没有去掉函数使用,但是它使得函数链接简单明了,简化了代码,使得它更容易阅读。 ?

3.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

【JS】1170- 5 个使用 Promise 时常见错误

Promise 提供了一种优雅方法来处理 js 中异步操作。这也是避免“地狱解决方案。然而,并没有多少开发人员了解其中内容。因此,许多人在实践中往往会犯错误。...在本文中,介绍一下使用 promise 时五个常见错误,希望大家能够避免这些错误。 1、避免 Promise 地狱 通常,Promise是用来避免地狱。...然而,有些人可能会认为只有在执行myPromise then方法之后才被触发。 然而,真相并非如此。相反,当一个Promise被创建时,被立即执行。...是否有什么神奇机制内置于 Promises 中,使我们能够做到这一点? 答案就是使用函数函数是一种耗时机制。只有当开发者明确地用 () 来调用它们时,它们才会执行。...createMyPromise = () => new Promise(resolve => { // HTTP request resolve(result); }); 对于HTTP请求,Promise 构造函数函数只有在函数被执行时才会被调用

93820

使用 Promise 时5个常见错误,你占了几个!

Promise 提供了一种优雅方法来处理 JS 中异步操作。这也是避免“地狱解决方案。然而,并没有多少开发人员了解其中内容。因此,许多人在实践中往往会犯错误。...在本文中,介绍一下使用 promise 时五个常见错误,希望大家能够避免这些错误。 1.避免 Promise 地狱 通常,Promise是用来避免地狱。...然而,有些人可能会认为只有在执行myPromise then方法之后才被触发。 然而,真相并非如此。相反,当一个Promise被创建时,被立即执行。...是否有什么神奇机制内置于 Promises 中,使我们能够做到这一点? 答案就是使用函数函数是一种耗时机制。只有当开发者明确地用 () 来调用它们时,它们才会执行。...createMyPromise = () => new Promise(resolve => { // HTTP request resolve(result); }); 复制代码 对于HTTP请求,Promise 构造函数函数只有在函数被执行时才会被调用

58800

使用 Promise 时5个常见错误,你占了几个!

Promise 提供了一种优雅方法来处理 JS 中异步操作。这也是避免“地狱解决方案。然而,并没有多少开发人员了解其中内容。因此,许多人在实践中往往会犯错误。...在本文中,介绍一下使用 promise 时五个常见错误,希望大家能够避免这些错误。 1.避免 Promise 地狱 通常,Promise是用来避免地狱。...然而,有些人可能会认为只有在执行myPromise then方法之后才被触发。 然而,真相并非如此。相反,当一个Promise被创建时,被立即执行。...是否有什么神奇机制内置于 Promises 中,使我们能够做到这一点? 答案就是使用函数函数是一种耗时机制。只有当开发者明确地用 () 来调用它们时,它们才会执行。...createMyPromise = () => new Promise(resolve => { // HTTP request resolve(result); }); 对于HTTP请求,Promise 构造函数函数只有在函数被执行时才会被调用

61810

为什么避免使用asyncawait?

有时会遇到一些论点,声称async/await可以防止callbacks和promises中可能出现 "地狱 "现象。...毕竟,promises设计之初目的之一就是消除 "地狱 "问题,所以我很困惑,人们说promises会导致地狱意思是,它毕竟被称为(callbacks)地狱,而不是promises...但后来真的看到了一些promise代码,它们看起来惊人地像地狱很困惑,为什么有人会这样使用promise。最终,得出结论,有些人对promise工作原理有一个非常基本误解。...在讨论这个问题之前,首先让承认,事实上不可能用async/await创造出金字塔结构地狱,所以它有这个优势。但是从来没有写过一个超过两级promise流,没有必要。...发现,每当我在promise链中看到 "地狱 "时,都是因为人们没有意识到promise作用就像一个无限长流程图。

1.7K42

JS高阶(一)Promise

解决地狱问题 地狱函数嵌套调用,外部函数异步执行结果是嵌套执行条件; 地域缺点:不便于阅读,不便于异常处理; 解决方案:promise链式调用; 5.2.1 对象状态改变...如果先指定,那当状态发生改变时,函数就会调用,得到数据; 如果先改变状态,那当指定时,函数就会调用,得到数据; let p = new Promise((resolve, reject...then() 返回一个新 promise,可以展开 then() 链式调用; 通过 then() 链式调用可以串联多个 同步/异步 任务; //规避地狱 let p = new Promise...5.9.2 async函数 ES7 标准语法; 返回值为 promise 对象; promise 对象结果由函数 async 执行返回值决定; // then方法返回结果一样 async function...函数中,但 async 函数中可以没有 await; 如果 await promise 失败了,就会抛出异常,需要通过 try catch 来捕获异常; /* 目标: * 读取resource/

2.4K10

JavaScript是如何工作:事件循环和异步编程崛起+ 5种使用 asyncawait 更好地编码方式!

嵌套 请看以下代码: ? 我们有一个由三个函数组成嵌套在一起,每个函数表示异步系列中一个步骤。 这种代码通常被称为“地狱”。...但是“地狱”实际上与嵌套/缩进几乎没有任何关系,这是一个更深层次问题。 首先,我们等待“单击”事件,然后等待计时器触发,然后等待Ajax响应返回,此时可能会再次重复所有操作。...当然,这种基于粗略方法还有很多不足之处。 这只是一个我们不必判断对于异步请求处理方式一个小步骤而已。 Promise Value 用Promise来重写上例: ?...这里将简要介绍async/await 提供可能性以及如何利用它们编写异步代码。 使用 async 声明异步函数这个函数返回一个 AsyncFunction 对象。...使用 async 声明函数时可以包含一个 await 符号,await 暂停这个函数执行并等待传递 Promise 解析完成,然后恢复这个函数执行并返回解析后值。

3.1K20

Javascript异步调细数:promise yield asyncawait

Go语言阻塞模型可以非常容易地处理这些异常,而换到了Node里,要处理异常就要跳到另一个函数里去,事情就会变得复杂。Node非阻塞模型没有了多线程,但却多出了“地狱”问题。...then方法执行结果也会返回一个Promise对象。因此我们可以进行then链式执行,这也是解决地狱主要方式。...reason如果 then 中抛出了异常,那么就会把这个异常作为参数,传递给下一个 then 失败onRejectedPromise构造函数接受一个函数作为参数,该函数两个参数分别是resolve...但是其中内容页没有必要重写。节选一部分如下:Async/await使得处理同步+异步错误成为了现实。...,等到执行栈清空以后执行;promise.then里函数会放到相应宏任务微任务队列里,等宏任务里面的同步代码执行完再执行;async函数表示函数里面可能会有异步方法,await后面跟一个表达式,

66900

为什么 asyncawait 不仅仅是句法糖

在 ES6 之前,是猿们处理异步编程方式。我们表达时间依赖性(即异步操作执行顺序)唯一方法是将一个嵌套在另一个中,这导致了所谓地狱。...对来说,这不是写这样一个函数最可读方式。...使用 async/await 我们用 async/await 语法重写上述解决方案: async function poll(retry, interval) { while (retry >= 0...这可能是 async/await 最大卖点--使我们能够以同步方式编写异步代码。另一方面,这可能是对 async/await 最常见反对意见来源,稍后再谈这个问题。...async/await 在同步和异步代码中提供了统一体验 async/await另一个好处是,await自动将任何非Promise(non-thenables)包装成 Promises

82820

【JS】336- 拆解 JavaScript 中异步模式

所谓难以理解,令人生畏地狱就是其具体体现。...地狱 地狱常常被人误解为,嵌套结构,如下所示: setTimeout(function() { output('one') setTimeout(function() {...}) 很多人觉得 Promise 好是好在其链式调用语法(刚接触 Promise 时候,也是这么觉得,毕竟它看起来比嵌套清晰太多了。)...这和上面提到不同,普通 callback 实际上是第三方直接调用我们函数这个第三方不一定是完全可信,我们函数可能会被调用,也可能不会调用,还可能会调用多次。...直到看到 redux-saga 作者明确表明不会使用 async await 取代 generator 来重写 redux-saga [8]才意识到 async 函数还是有很多缺陷

79730

【春节日更】总结 promise , generator, asyncawait三者关系

昨天,我们详细介绍了函数,promise,generrator,async/await ; 今天我们来分析下,它们之间关系 我们js异步是使用回调进行实现,而它有几个缺点 从函数 ->...promise -> promise + generrator = async/await 01 函数 1、 缺乏可信度 将回函数传递给别人使用,当函数执行过早,过晚,多次调用等问题时,会出现...bug,所以不可信任 2、 嵌套地狱) 02 promise 后面我们使用promise来进行解决,以then操作形式,进行链式操作,而不再是地狱 promise缺点 1、 promise...后面就是有我们 async/await 操作 优点: 1、以同步方式进行书写,而不是 then.then.then 操作,增强可读性。...3、对同步错误捕获更加友好,try-catch可以捕获async/await错误 4、解决不知道错误才哪里问题,解决promise缺点4 5、调试更加简单,友好 参考: https://blog.csdn.net

38610

【JS】285- 拆解 JavaScript 中异步模式

所谓难以理解,令人生畏地狱就是其具体体现。...地狱 地狱常常被人误解为,嵌套结构,如下所示: setTimeout(function() { output('one') setTimeout(function() {...}) 很多人觉得 Promise 好是好在其链式调用语法(刚接触 Promise 时候,也是这么觉得,毕竟它看起来比嵌套清晰太多了。)...这和上面提到不同,普通 callback 实际上是第三方直接调用我们函数这个第三方不一定是完全可信,我们函数可能会被调用,也可能不会调用,还可能会调用多次。...直到看到 redux-saga 作者明确表明不会使用 async await 取代 generator 来重写 redux-saga [8]才意识到 async 函数还是有很多缺陷

80221

JavaScript引擎是如何工作?从调用栈到Promise你需要知道一切

但首先它必须通过队列。队列是一个队列数据结构,顾名思义是一个有序函数队列。 每个异步函数在被送入调用栈之前必须通过队列。但谁推动了这个函数呢?...在后面的内容中,我们将详细介绍 ES6 Promises地狱和 ES6 Promise JavaScript 中函数无处不在。它们用于同步和异步代码。...调在 JavaScript 中很普遍,所以近几年里出现了一个问题:地狱。 JavaScript中地狱指的是编程“风格”,嵌套嵌套在……其他中。...正是由于 JavaScript 异步性质导致程序员掉进了这个陷阱。 说实话,从来没有碰到过极端金字塔,也许是因为重视代码可读性,并且总是试着坚持这个原则。...如果你发现自己掉进了地狱,那就说明你函数太多了。 不会在这里讨论地狱,如果你很感兴趣的话,给你推荐一个网站: callbackhell.com 更深入地探讨了这个问题并提供了一些解决方案。

1.5K30

了解 JavaScript 中函数

为了有效管理这种情况,JavaScript 提供了一个称为函数概念。 什么是函数? 简单来说,函数是一个作为参数传递给另一个函数并在某些操作完成后执行函数。...事件是系统或 HTML 文档中发生操作或事件,鼠标点击、按键或页面加载。使用回函数,我们可以定义事件发生时应执行特定操作。...避免地狱 使用多个嵌套(也称为地狱)可能会使代码难以阅读和维护。...为了避免这种情况,您可以使用现代 JavaScript 功能,例如 Promise、async/awaitasync.js 等库。这些替代方案提供了更清晰、更易于管理方法来处理异步操作。...因此,我们有必要研究像promises, async/await 等现代替代方法,以简化异步编程并创建更可读、更易管理代码。

20930

转:用 Async 函数简化异步代码

Promise 在 JavaScript 上发布之初就在互联网上流行了起来 — 它们帮开发人员摆脱了地狱,解决了在很多地方困扰 JavaScript 开发者异步问题。...但 Promises 也远非完美。它们一直请求,在一些复杂问题上仍会有些杂乱和一些难以置信冗余。...链式操作 Promise 之所以能受到众人追捧,其中一个方面是因为它能以链式调用方式把多个异步操作连接起来,避免了嵌入形式。不过 async 函数这个方面甚至比 Promise 做得还好。...问题 如果你刚开始使用 async 函数,需要小心嵌套函数问题。比如,如果你 async 函数中有另一个函数(通常是),你可能认为可以在其中使用 await ,但实际不能。...不过可以通过为函数添加 async 关键字来解决这个问题。

60010
领券