zoukankan      html  css  js  c++  java
  • 【转】AngularJS领域中的Promise

    Promise是一个接口,它用来处理的对象具有这样的特点:在未来的某一时刻(主要是异步调用)

    会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。

    为了展示它的优点,来看一个例子其中需要获取用户当前的配置文件:

    1 var currentProfile=null;
    2 var username='something';
    3 fetchServerConfig(function(serverConfig){
    4     fetchUserProfiles(serverConfig.USER_PROFILES,username,
    5         function(profiles){
    6             currentProfile=profiles.currentProfile;
    7         });
    8 });

    上面这种处理方式存在一些问题:

      1.对于代码缩进来说,这种代码就是一个噩梦,尤器在需要链式调用很多次的时候。

      2.处于回调和函数之间的错误报告非常容易丢失,除非你在每一个步骤中都手动处理错误。

      3.如果需要使用currentProfile对象来做一些事情,那么你需要在最内层的回调中封装真正想要

       实现的逻辑,要么直接封装,要么通过一个单独的函数来封装。

    promise机制可以很好地解决这些问题。在深入了解其运行机制之前,来看看如何使用promise实现

    同样的事情:

    1 var currentProfile=fetchServerConfig().then(function(serverConfig){
    2     return fetchUserProfiles(serverConfig.USER_PROFILES,username);
    3 }).then(function(){
    4     return profiles.currentProfile;
    5 },function(err){});

    使用promise机制有如下优点:

      1.可以对函数进行链式调用,所以你不会陷入代码缩进噩梦中。

      2.在调用链的过程中,可以保证上一个函数调用完成后才会调用下一个函数。

      3.每一个then()调用都带有两个参数(两个都是函数)。第一个是成功之后的回调,第二个

       是出错之后的处理器。

      4.如果调用链中出现了错误,错误将会被冒泡传递到其余的错误处理函数中,所以,最终来说

       所有错误都可以在任意一个回调函数中进行处理

  • 相关阅读:
    BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元
    BZOJ 4569 [Scoi2016]萌萌哒 ——ST表 并查集
    BZOJ 4590 [Shoi2015]自动刷题机 ——二分答案
    BZOJ 3462 DZY Loves Math II ——动态规划 组合数
    BZOJ 4827 [Shoi2017]分手是祝愿 ——期望DP
    BZOJ 4827 [Hnoi2017]礼物 ——FFT
    BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈
    ZOJ 3874 Permutation Graph ——分治 NTT
    UVA 12633 Super Rooks on Chessboard ——FFT
    HDU 2065 "红色病毒"问题 ——快速幂 生成函数
  • 原文地址:https://www.cnblogs.com/Bideam/p/5791718.html
Copyright © 2011-2022 走看看