承诺对象的角度(Q介绍)
承诺
承诺是一种以异步操作的形式运行异步事件的模式,避免了层嵌套,并且可以通过链操作异步事件。
我们知道在编写Javascript异步代码时,回调机制是最简单的,但是用这种机制,它必须牺牲控制流、异常处理和语义函数的代价,甚至让我们陷入回调的弹坑,并解决承诺的问题。
在6,内置AngularJS内置Q承诺,AngularJS,当所有的承诺 /规格如下:
每个任务有三种状态:未完成(待定)、完成(完成)和失败(拒绝)。
1.pending状态:可以转移到性能或拒绝状态。
2.fulfilled状态:不能改变任何其他州和国家是无法改变的,必须有一个值。
3.rejected状态:不能改变任何其他州和国家是无法改变的,一定有原因。
国家转移是一次性的,一旦国家完成(完成)或失败(失败/拒绝),就不能再改变了。
复制代码代码如下所示:
功能oktogreet(name){
返回的名称= 'robin罩;
}
功能asyncgreet(name){
VaR q.defer美元递延=();
setTimeout(){()函数(
由于在将来异步异步实现中,我们将代码包放在应用程序调用中,同时对模型的更改进行正确的观察。
$范围($)函数(){()
deferred.notify(迎接+姓名+'。);
如果(oktogreet(名字)){
deferred.resolve(你好,+姓名+!);
{人}
deferred.reject('greeting+姓名+是不允许的。);
}
});
},1000);
返回deferred.promise;
}
VaR的承诺= asyncgreet('robin罩);
Promise.then(功能(问候){)
警报(''成功:+祝福);
}函数(原因){
警报('failed:+原因);
}函数(更新){
警报(不通知:+更新);
});
q承诺的基本用法
上面的代码表示的一样q.defer美元建立的几种方法的实例的作用()。异步操作是否成功,并承诺对象的状态是由解决了成功(即待解决);如果异步操作失败,那么状态更改为由拒绝法这是失败的,从待拒绝。最后,回到deferred.promise,我们可以调用链的方法。
JS会有本地的承诺,承诺的对象已经有6,和Firefox和Chrome 32 Beta版本已经实施的基本保证API
在AngularJs q.defferd美元
非常对象被链通过调用对象连接三美元q.defferd.this任务状态的承诺 /规范通过API。
递延的API
对延迟对象的方法
1.resolve(价值):在申报解决(),它表明承诺对象是由待解决。
2.reject(原因):在申报解决(),它表明承诺的对象是从待拒绝。
3.notify(价值):申报通知()表示的承诺对象的未完成的状态,可以多次调用之前解决或拒绝。
递延对象属性
承诺:最后的返回是一个新的延迟对象承诺属性,而不是原来的延迟对象。新的承诺对象只能观察原始承诺对象的状态,但不能修改延迟对象的内部状态,以便外部修改任务状态。
承诺的API
创建一个延期审时,一个新的承诺的对象被创建和引用可以通过deferred.promise。
允诺对象的目的是允许延迟任务的感兴趣部分在任务完成时获得其执行结果。
允诺对象法
的1.then(程序,fulfilledhandler,progresshandler):方法是用来监视的promise.errorhandler不同状态听失败的国家,fulfilledhandler监控实现的状态,和progresshandler监视器未完成(未完成)的状态。另外,通知回调可以打0多次,在解决或拒绝提供进度指示器(解决了)。
对2.catch快捷(errorCallback)-- promise.then(null,errorCallback)
3.finally(回调)-让你看看一个承诺正在执行或拒绝,但这并不能改变最终的价值。这可以用来做一些工作来释放资源或清理无用的物体,无论承诺是拒绝或解决。有关更多信息,请参阅完整的文档规范。
允诺链调用可以由当时()方法实现。
复制代码代码如下所示:
promiseb = promisea.then(功能(结果){
返回结果+ 1;
});
将 / / promiseb是经过加工promisea立即处理,
/ /和它的价值是promisea效果增加1
q的其他方法
q.when美元(价值):通过变量的值,promise.then()执行成功的回调
q.all美元(承诺):多承诺必须成功执行回调函数执行成功。传递的值是数组或散列值。数组中的每个值都是与索引相对应的承诺对象。