手机版

Angularjs Promise示例的详细说明

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

一、什么是承诺

Promise是一个对象,表示最终可能的返回值或函数引发的异常,用于异步处理该值。

Promise是一个构造函数,它有几个异步方法来处理值,如all、reject和resolve,原型有相同的熟悉方法,如then和catch。

二、为什么要用Promise

有了Promise对象,可以在同步操作的过程中表达异步操作,避免嵌套回调函数。此外,Promise对象提供了统一的接口,这使得控制异步操作变得更加容易。

承诺对象具有以下两个特征:

1.物体的状态不受外界影响。

Promise对象表示具有三种状态的异步操作:挂起、已解决和已拒绝。只有异步操作的结果才能决定当前的状态,其他任何操作都无法改变这个状态。

2.状态一旦改变,就不会再改变,这个结果随时都可以得到。

只有两种可能性可以更改Promise对象的状态:从“待定”更改为“已解决”;从待定到拒绝。只要这两种情况发生,状态就会固化,不会再改变,这个结果会一直保持下去。

三、如何创造承诺

先粘贴一段代码:

define([ 'angularModule'],function(app){ app . register . service(' HttprequestServiCe ',['$http ',' $q ',function ($http,$ q){ return { request : function(params){ var delied=$ q . delay();$ http({ method : params . method,url : params.url })。成功(函数(数据){ deferred.resolve(数据));} ).错误(函数(数据){ deferred.reject(数据));} );延期归还。} } }])});谈论$q服务

q服务是一个Promise实现,它自己封装在AngularJS中。

要创建延迟对象,可以调用defer()方法:

var delivered=$ q . deliver();//上面公开的deffered是三个方法和一个promise属性,可以用来处理promise。//promise属性包含三个方法(然后、捕获和最后)

在Promise中,定义了三种状态:等待状态、完成状态和拒绝状态。

定义的原料药

1.1 .定义对象的方法

1.resolve(值):在声明的resolve()处,它指示promise对象从挂起状态更改为已解决。2 .拒绝(原因):在声明的解析()处,它表示承诺对象从挂起状态更改为拒绝。3.notify(value):在notify()被声明的地方,表示promise对象的未完成状态,在解析或拒绝之前可以多次调用。

2 .定义的对象属性

Promise:最终返回新的延迟对象的promise属性,而不是原来的延迟对象。这个新的Promise对象只能观察原Promise对象的状态,不能修改延迟对象的内部状态,这样可以防止任务状态被外部修改。

3.承诺原料药

创建延迟实例时,会创建一个新的promise对象,并且可以通过deferred.promise获取引用

promise对象的目的是允许感兴趣的部分在延迟任务完成时获得其执行结果。

4.4 .承诺对象的方法

1.然后(错误处理程序、已完成处理程序、进度处理程序):然后方法用于监视一个Promise的不同状态。ErrorHandler监控失败状态,fulfilledHandler监控已完成状态,progressHandler监控未完成状态。此外,notify回调可能被调用0到多次,在被解决或拒绝之前提供进度指示。

2.catch(error callback)—— promise的快捷方式。然后(null,errorcallback)

3.finally(callback) ——允许您观察承诺是被执行还是被拒绝,但它不需要修改最终值。这可以用来释放资源或清理无用的对象,无论承诺是被拒绝还是被解决。

q常用的几种方法:

Defer()创建一个Defer对象,它可以执行几种常用的方法,如resolve、reject、notify等。all()在promise的数组中传递,并批量执行,当()传入不确定的参数时返回promise对象,如果满足Promise标准,则返回Promise对象。All()方法

批量执行某些方法时,可以使用此方法。有了all,您可以并行执行多个异步操作,并在一次回调中处理所有返回的数据。

使用Promise.all执行,all接收一个数组参数,其中的值最终返回给Promise对象。这样,三个异步操作的并行执行在它们全部执行之前不会进行。

那么,三个异步操作返回的数据在哪里呢?那就全进去了。All将把所有异步操作的结果放入一个数组中,然后发送给then,这就是下面的结果。所以下面代码的输出是:

var FucA=function(){ console . log(' FucA ');回报‘你好,付娜’;} var FuncB=function(){ console . log(' FuncB ');返回‘你好,FunB’;} $ q . all([FucA()、FucB()])。然后(函数(结果){ console.log(结果);});执行结果:

funcafunarray['你好,付娜','你好,funb'] when()方法

可以在when方法中传递一个参数,该参数可以是符合承诺标准的值或外部对象。

var FucA=function(){ console . log(' FucA ');回报‘你好,付娜’;} $ q . when(FucA())。然后(函数(结果){ console.log(结果);});当传入的参数不确定时,可以使用这种方法。

你好,付娜

第四,连锁要求

then()方法可以实现诺言的链式调用,因为then方法总是返回一个新的诺言。

runAsync1()。然后(函数(数据){ console.log(数据);返回runasync 2();}).然后(函数(数据){ console.log(数据);返回runasync 3();}).然后(函数(数据){ console.log(数据);});函数runasync1 () {var p=newpromise(函数(resolve,reject){//做一些异步操作settimeout(函数(){console.log('异步任务1执行完成'));解析('无论什么数据1 ');}, 1000);});返回p;} function runasync 2(){ var p=new promise(function(resolve,reject){//做一些异步操作settimeout(function(){ console . log('异步任务2执行完成'));解析(‘无论数据2’);}, 2000);});返回p;} function runasync 3(){ var p=new promise(function(resolve,reject){//做一些异步操作settimeout(function(){ console . log('异步任务3执行完成'));解析('无论什么数据3 ');}, 2000);});返回p;}操作结果:

摘要

以上是边肖介绍的Angularjs Promise例子的详细说明,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:Angularjs Promise示例的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。