习惯上js使用闭包或者回调来相应非同步返回的数据,比如页面加载之后的XHR请求。我们可以跟数据进行正常交互,就好像它已经返回了一样,而不需要依赖回调函数的触发。
那么ng提出的promise是为了解决什么问题呢? 回调已经被使用了很长时间,通常如果有回调依赖其他还回调时将会时调试变得非常艰难,每一步调用之后都需要显示处理错误。与之不同的是promise提供了另外一个抽象:这些函数返回promise对象。
从一定层面上看ng改变的不是简单的改变代码风格,而是让我对一些思维习惯发起了反思和改善。
回调示例
1
2
3
4
5
6
|
User.get(fromId,{
success:
function
(){
user.friends.find(toId,
function
(){})
},
failure:
function
(){}
})
|
ng promise示例
1
2
3
4
5
6
7
|
User.get(fromId).
then(
function
(user){
},
function
(err){
}).
then(
function
(){},
function
(){});
|
3、为什么使用promise
使用了promise的收获之一是逃脱了回调的固定思维逻辑。promise让异步处理的机制看上去更像是同步,基于同步函数我们可以按照预期来捕获返回值和异常值。可以在程序中的任何时刻捕捉错误,并且绕过依赖于程序异常的后续代码,我们不需要思考这个同步带来的好处。因此使用promise的目的是:获取功能组合和错误冒泡能力的同时,保持代码异步运行的能力。
promise是头等对象,自带了一些约定。
-
只有一个resolve或者reject会被调用到。
-
如果promise被执行或者被拒绝了,依赖于他们的处理程序仍然会被调用。
-
处理程序总是会被异步调用。
4、如何创建promise
想要在angularjs中创建promise,可以使用内置的 q 服务, q服务, q服务,q服务在它的deferred API中提供了一些方法。
首先把它注入到你想使用它的对象中
1
2
3
4
|
angular.module(
'ngApp'
,[]).
factory(
'UserInfoService'
,[
'$q'
,
function
($q){
//code here
}])
|
要创建一个deferred对象,可以调用defer()方法; var deferred= $q.defer();
总结
-
框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。
-
算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯
-
在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。
-
要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!
喜欢这篇文章文章的小伙伴们点赞+转发支持,你们的支持是我最大的动力!