代码求助,关于 Proxy Promise Pattern 的使用, javascript 的

2015-06-24 10:25:37 +08:00
 shuson

actionA, actionB都返回promise。

基本逻辑是,actionA的reject要执行actionB,actionB的resolve要执行actionA,此时actionA再reject就error。

actionA().then(
    function(){//resolve
        //do right thing
    },
    function(){ //handle reject
        actionB().then(function(){
            actionA().then(function(){
                //do right thing
            },function(){
            //Error Alert from actionA
           })
      },function(){
            //Error Alert from actionB
     })
    }
)

怎么使用proxy pattern优化上面的code

2640 次点击
所在节点    JavaScript
7 条回复
lujiajing1126
2015-06-24 11:18:01 +08:00
什么是proxy promise pattern。。。
shuson
2015-06-24 11:29:08 +08:00
@lujiajing1126 当作是proxy pattern吧,表达不清楚了
sodatea
2015-06-24 11:31:13 +08:00
orz 这个代码风格……
建议看看周爱民的这篇文章 -> http://www.w3ctech.com/topic/916
otakustay
2015-06-24 11:44:31 +08:00
如果你确保你的do right thing是不会出错的,或者出错也要用一致的逻辑来处理error,那这个逻辑应该是很简单的:

var a = actionA();

a.then(doRightThing); // 正确的

a.catch(actionB) // 出错后调用actionB
.then(actionA) // 如果actionB成功就继续actionA
.then(doRightThing) // actionA成功就doRightThing
.catch(alertError); // 上面无论哪一步失败都处理错误

重点在一系列的then过程中,任何一个环节出错,错误都会传到最后近的一个catch上去,所以逻辑的处理是线性的而不是嵌套的
shuson
2015-06-24 11:54:34 +08:00
@otakustay 感谢你的解决方案, 很有启发。
但是,我的问题是可否用proxy pattern来重构我那些垃圾的嵌套代码。
otakustay
2015-06-24 12:05:59 +08:00
@shuson 不明白你的proxy pattern是指经典OO Design Pattern里的Proxy Pattern么,如果是的话,为何要一开始就把“用Proxy Pattern”这明显是“手段”的东西作为重构的“目标”呢?所谓重构不就是保证正确性的前提下把代码理得更顺更易读吗,既然原来Promise就可以达到这样的目标,为何还要引入其它的Pattern
shuson
2015-06-24 13:09:52 +08:00
@otakustay 因为在actionB里的resolve还要call actionA,这样嵌套的代码很不雅。看到proxy可以解决这一的问题,但是不知道怎么写code

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX