须要在 angular 中掌握异步的知识,咱们须要掌握这几个重要的知识点,
http, promisepromise
假设有一个家具厂,而它有一个VIP客户张先生。 有一天张先生须要一个豪华衣柜,因而,他打电话给家具厂说我须要一个衣柜,回头作好了给我送来,这个操做就叫**$q.defer**,也就是延期,由于这个衣柜不是如今要的,因此张先生这是在发起一个可延期的请求。异步
同时,家具厂给他留下了一个回执号,并对他说:咱们作好了会给您送过去,放心吧。这叫作==promise==,也就是承诺。 这样,这个==defer==算是正式建立了,因而他把这件事记录在本身的日记上,而且同时记录了回执号,这叫作==deferred==,也就是已延期事件。post
如今,张先生就不用再去想着这件事了,该作什么作什么,这就是“异步”的含义。 假设家具厂在一周后作完了这个衣柜,并如约送到了张先生家(包邮哦,亲),这就叫作==deferred.resolve(衣柜)==,也就是“已解决”。而这时候张先生只要签收一下这个(衣柜)参数就好了,固然,这个“邮包”中也不必定只有衣柜,还能够包含别的东西,好比厂家宣传资料、产品名录等。整个过程当中轻松愉快,谁也没等谁,没有浪费任什么时候间。事件
假设家具厂在评估后发现这个规格的衣柜咱们作不了,那么它就须要==deferred.reject(理由)==,也就是“拒绝”。拒绝没有时间限制,能够发生在给出承诺以后的任什么时候候,甚至可能发生在快作完的时候。并且拒绝时候的参数也不只仅限于理由,还能够包含一个道歉信,违约金之类的,总之,你想给他什么就给他什么,若是你以为不会惹恼客户,那么不给也不要紧。get
假设家具厂发现,本身正好有一个符合张先生要求的存货,它就能够用==$q.when(现有衣柜)==来把这个承诺给张先生,这件事就当即被解决了,皆大欢喜,张先生可不在意你是从头作的仍是现有的成品,只会惊叹于大家的效率之高。 假设这个家具厂对客户格外的细心,它还可能经过deferred.notify(进展状况)给张先生发送进展状况的“通知”。 这样,整个异步流程就圆满完成,不管成功或者失败,张先生都没有往里面投入任何额外的时间成本。产品
好,咱们再扩展一下这个故事: 张先生此次须要作一个桌子,三把椅子,一张席梦思,可是他不但愿今天收到个桌子,明天收到个椅子,后天又得签收一次席梦思,而是但愿家具厂作好了以后一次性送过来,可是他下单的时候又是分别下单的,那么他就能够从新跟家具厂要一个包含上述三个承诺的新承诺,这就是$q.all(桌子承诺,椅子承诺,席梦思承诺), 这样,他就不用再关注之前的三个承诺了,直接等待这个新的承诺完成,到时候只要一次性签收了前面的这些承诺就好了。io