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

AngularJS 中的Promise --- $q服务详解

先说说什么是Promise,什么是$q吧。Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered。...但是有了Promise这种规范,它能帮助开发者用同步的方式,编写异步的代码,比如在AngularJS中可以使用这种方式: deferABC.resolve(xxx) .then(funcSuccess(...小白让舍友带饭() .then(韭菜鸡蛋,西红柿炒鸡蛋) .finally(带包烟) $q服务 q服务是AngularJS中自己封装实现的一种Promise实现,相对与Kris Kwal's Q要轻量级的多...其中resolve中传入的变量或者函数返回结果,会当作第一个then方法的参数。...all()方法 这个all()方法,可以把多个primise的数组合并成一个。当所有的promise执行成功后,会执行后面的回调。回调中的参数,是每个promise执行的结果。

1.5K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    promise 和 async 的用法

    promise // 先构造一个 promise 函数 // resolve 和 reject 都是一个函数 // resolve 在成功时调用 // reject 在失败时调用 function promise...catch 第一个参数为resolve状态时的回调,第二个参数为reject状态时的回调 // catch 相当于 then(null, reject) promise().then( (resolve...resolve 函数传过来的参数 // 第二个 then 接受一个参数是第一个 then 返回的值 promise().then( (resolve) => (resolve + 1) // 接受...= await promise() console.log(res) console.log('wait') return res } // async 函数返回 promise 对象...// 只有函数内的 await 语句全部执行完,或者遇到 return 或 抛出错误,才会发生状态改变 // 如果发生错误或状态为 reject 则执行 catch async().then( (res

    48350

    Promise和asyncawait的总结

    第一次开始注意到ES6的语法,就是因为Promise,感觉比回调好用,后来又接触到async/await,使用后大大的减少了代码的层次结构,因此觉得有必要总结一下 Promise是ES6的语法,async.../await是ES7的语法 Promise Promise是异步编程的一种解决方案,它有三种状态,分别是: pending:进行中 resolved:已完成 rejected:已失败 之前的方法回调:...后,调用更加灵活了,回调可以处理,也可以不处理,同时可以处理异步调用的异常,更具有通用性 已网络接口调用为例(这里采用ajax): function ajaxPromise( param ) {...: 只要有一个失败了,就会抛出异常 Promise.race: 返回执行最快的那个,无论异常或者失败 async/await await必须使用在async修饰的方法内部 function func1(...,使代码更加清晰,代码中的func1使用await修饰后,可以直接拿到then方法中的结果,同时可以如果不使用Promise.catch方法,则会抛出异常,这时候可以配合’try/catch’使用: function

    45610

    介绍Promise构造函数的几种方法

    1 引言 在使用了Promise构造函数创建了Promise对象之后就要使用到Promise中的一些方法,下面将介绍这几种方法。...2 问题 介绍Promise函数的then方法、reject用法、catch用法和all用法这四种用法。...Promise中最为重要的是状态,通过then的状态传递可以实现回调函数链式操作的实现。...reject一样的,也就是说如果Promise的状态变为reject时,会被catch发现到,需要注意的是如果前面设置了reject方法的回调函数,则catch不会捕捉到状态变为reject的情况。...4 结语 针对promise构造函数,本文章简要分析了promise中的then方法,reject方法,和catch方法,promise还有几种方法,如all,race用法等等。

    75620

    Promise的含义和用法「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 含义 Promise是异步编程的一种解决方案。 Promise对象有以下2个特点: 1.对象的状态不受外界影响。...Promise对象代表一个异步操作,有三种状态:**Pending(进行中)、Resolved(已完成)和Rejected(已失败)。...就算改变已经发生了,你再对Promise对象田静回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。...有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。...then方法可以接受两个回调函数作为参数,第一个回调函数是promise对象状态变为resolved时候调用,第二个回调函数是promise对象的状态为reject时调用 发布者:全栈程序员栈长,转载请注明出处

    46730

    Promise: 异步编程的理解和使用

    时间线里程碑1949回调函数的概念诞生1958回调函数在 Fortran II 中应用1988Promise 的概念诞生1995JavaScript 诞生2009JavaScript 的非官方 Promise...在快速迭代的开发中,因为回调函数的滥用,很容易产生被人所诟病的回调地狱问题。Promise 的异步编程解决方案比回调函数更加合理,可读性更强。...*/)相对于使用回调函数,逻辑更清晰,什么时候初始化完成和触发回调一目了然,不再需要重复判断状态和回调函数。...,看起来貌似没有什么用,但是在处理第三方接口的时候可以 “Hold” 住同步和异步返回值,否则对一个非 Promise 返回值使用 then() 链式调用则会报错。...转载必须包含本声明,保持本文完整,并以超链接形式注明作者后除和本文原始地址:https://blog.mazey.net/understand-promise(完)

    1.9K103

    Promise杂记 前言APIPromise特点状态追随V8中的async await和Promise实现一个Promise参考

    文中如有错误,请轻喷~ API Promise是社区中对于异步的一种解决方案,相对于回调函数和事件机制更直观和容易理解。ES6 将其写进了语言标准,统一了用法,提供了原生的Promise对象。...值穿透,传给then或者catch的参数为非函数时,会发生穿透(下面有示例代码) 5. 无法取消,Promise一旦运行,无法取消。 6....和PromiseReactionJob, 并且都是属于microtask类型的任务 PromiseReactionJob: 可以通俗的理解为promise中的回调函数 PromiseResolveThenableJob...以 then 为调用函数,thenable 为this,resolve function和reject function 为参数调用返回。...深入理解 await 的运行机制 V8中更快的异步函数和promise 剖析Promise内部结构,一步一步实现一个完整的、能通过所有Test case的Promise类 PromiseA+ ES6

    1.1K20

    最简单的手写Promise,30行代码理解Promise核心原理和发布订阅模式

    看了全网手写 Promise 的,大部分对于新手还是比较难理解的,其中几个比较难的点: 状态还未改变时通过发布订阅模式去收集事件 实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫 Revealing...Constructor Pattern 暴露构造器模式 实例上的 then 方法是可以多次调用的,所以内部收集事件时要用数组去存,注意这里成功和失败的事件其实是需要用两个单独的队列去存的 链式调用 then...发布订阅模式 如果理解了发布订阅模式,手写这个 Promise 就很简单了,原理都是一样的:先把事件收集到一个队列里,等某个条件触发了再把所有事件拿出来执行。...24种基本的设计模式中并没有发布订阅模式,有的说是观察者模式的一个别称,现在更倾向于把它列为一种单独的设计模式,它和观察者模式类似,在发布者和订阅者中间多了一个中心,称为调度中心、消息中心、事件通道。...:"' + res + '"') }) Promise 支持 then 链式调用版本 支持链式调用不能直接返回 this,返回 this 的话每次调用的都是同一个了,要返回一个新的 promise 实例

    20820

    PROMISE解决AJAX中的串行和并行

    解决AJAX回调地狱 AJAX 串行带来的回调地狱 PROMISE-THEN的链式写法优雅解决 promise2(),promise3()]) ALL中存放的是多个PROMISE实例(每个实例管理着一个异步的操作),执行all方法返回的是一个新的PROMISE实例 当所有...PROMISE实例的状态都为Fulfilled的时候(成功),让all返回的新的PROMISE实例的状态也改为Fulfilled,并且把所有PROMISE成功获取的结果,存储成为一个数组 结果数组中的顺序和写入...all中的实例顺序一致,让all返回的新的PROMISE实例的VALUE值等于这个数组 都成功才会通知THEN中第一个方法执行,只要有一个失败,就会通知THEN中第二个方法执行(或则catch中的方法)...]) */ 与Promise.all相对应的方法是Promise.race 它是看哪一个Promise状态先处理完(成功或则失败),以最先处理完的为主

    6100

    Promise的all和race方法的使用

    前文初识Promise中,可以初步了解Promise的简单用法和作用。今天这篇将更进一步,重点介绍promise的两个方法——all和race。 先由一个例子引入,仔细观察以下腾讯新闻的页面。...每次回调执行,计数器都会加1,并把数据塞进数组,并且会执行检查器函数,当检查器满足条件时,证明所有数据返回,并且数据都保存到了一个数组里,可以对其进行操作了。...的all方法的参数是一个数组,数组每一项其实就是一个promise对象,每个promise对象内部都会resolve一团数据,这团数据会被之后的then方法接收,then方法接收到的数据也是一个数组,正好对应...all方法里面每个promise对象resolve出来的数据。...和all方法不同的是,all会把所有promise对象resolve的数据传递到then中,race只传递最先返回的那个promise resolve的值。

    1.1K30

    ES6中的Promise和Fetch

    ES6中的Promise和Fetch 2018-1-24 作者: 张子阳 分类: Web前端 JavaScript是单线程执行的,因此,为了避免操作时的页面中断(体现为页面假死),可以使用回调函数...但是如果回调函数中仍然嵌套有回调函数,代码就会变得越来越不可维护。这篇文章介绍ES6如何通过Promise解决这个问题,并介绍了相关的Fetch方法。...Promimse的构造函数接受一个函数,这个函数的两个参数分别称作resolve方法和reject方法。当任务成功时,调用resolve()方法,失败时,调用reject()方法。...调用resolve和reject时,传入的值,将作为输入参数,传递到then方法的resolve和reject中。...值得注意的是:then方法中上一个resolve方法的返回值,将成为下一个then方法中resolve的输入参数。由此构成了数据的流动。

    1.5K40

    详解promise、async和await的执行顺序

    前言 对于promise、async和await的执行顺序,很多人都容易弄混,也有很多人只愿意在程序中运用一种,比如我只使用promise,不使用async和await;也有只用async和await,...示例 下面这段promise、async和await代码,请问控制台打印的顺序?...script end promise2 async1 end setTimeout 知识点 显然,这考察的是js中的事件循环和回调队列。...* Promise的reject和resolve是异步执行的回调。所以,resolve()会被放到回调队列中,在主函数执行完和setTimeout前调用。...async标记的函数会返回一个Promise对象 难点 最令人困惑的,就是async1 end在promise2之后输出 在函数async1中,执行promise(由于async2是async标记的函数

    1.7K40

    Promise和asyncawait:异步操作的利器与短板

    在JavaScript中,我们有很多方式来处理异步操作,但其中最常用的就是Promise和async/await。...Promise的局限回调地狱的变种尽管Promise改善了回调地狱的问题,但在某些复杂的场景下,仍然可能出现难以阅读和维护的代码。无法取消一旦Promise被创建并开始执行,你就无法中途取消它。...状态管理的复杂性Promise的三种状态对于初学者来说可能有点难以理解和管理,特别是在处理多个相互依赖的Promise时。...async关键字用于声明一个函数是异步的,而await关键字则用于等待一个Promise对象的解决。...结语:选择合适的工具总的来说,Promise和async/await都是处理异步操作的有效工具,它们各有千秋。

    19210

    JavaScript: 结合 async 异步函数 - 提高 Promise 的易用性

    前言 前篇写了 promise 的使用的基本介绍,没看的朋友可以先预览一下如何用 Promise 自定义一个 GET 请求的函数 异步函数怎么工作的?...如何用我们的 async 改写我们的 promise 代码 假如我们这里需要获取一段文字数据 function logFetch(url) { return fetch(url) .then...异步函数返回值 无论是否使用 await,异步函数都会返回 Promise。该 Promise 解析时返回异步函数返回的任何值,拒绝时返回异步函数抛出的任何值。...直接使用 promise function logInOrder(urls) { // 先使用我们上面写好的 fetch 函数获取所有的数据 const textPromises = urls.map...,这样就牺牲了性能,但是我们还有更好的方法 async function logInOrder(urls) { // 使用 map,和 async 改写,这样可以并行获取数据 const textPromises

    76540

    ES6中的Promise和Generator详解

    简介 ES6中除了上篇文章讲过的语法新特性和一些新的API之外,还有两个非常重要的新特性就是Promise和Generator,今天我们将会详细讲解一下这两个新特性。...Promise 什么是Promise Promise 是异步编程的一种解决方案,比传统的解决方案“回调函数和事件”更合理和更强大。...Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。...因为多个异步操作形成了强耦合,只要有一个操作需要修改,它的上层回调函数和下层回调函数,可能都要跟着修改。这种情况就称为”回调函数地狱”(callback hell)。...); }).then(function(data){ console.log(data); }) Thunk函数和异步函数自动执行 在讲Thunk函数之前,我们讲一下函数的调用有两种方式,一种是传值调用

    1.2K21
    领券