2013-10-09 33 views
3
的模式

最近我在年初jQuery的承诺阅读article约缺点/ A模式:如jQuery混淆有关承诺/ jQuery中

库(1.8)之前不这样做:他们只是变异 的现有承诺的状态。这意味着如果您向多个消费者承诺 ,他们可能会干扰其状态。到 意识到有多荒谬,就是考虑同步并行:如果 你给了一个函数的返回值给两个人,其中一个 可以以某种方式将它改变成一个抛出的异常!

我想用代码来实现的缺点,我想:

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script> 
<script type="text/javascript"> 

    var promise = $.get("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"); 

    var promise1 = promise.then(function (result) { 
     return "Hello"; 
    }); 

    promise1.then(function (result) { 
     console.log("in promise1 ------>", result.length); 
    }) 

    var promise2 = promise.then(function (result) { 
     return "World"; 
    }) 

    promise2.then(function (result) { 
     console.log("in promise2 ------>", result.length); 
    }) 
</script> 
</head> 
... 

似乎不工作,我如何能实现的情况与上述的文章?

+0

“达到缺点”是什么意思? –

+0

@ Beetroot-Beetroot:我想写一个演示,它可以显示'...他们只是改变了现有承诺的状态......' – hh54188

+0

所以你想写一些代码来演示代替版本的缺点的jQuery。你不觉得你的时间可以更好地度过吗? –

回答

1

那么这样的事情就不会1.8下班前,与.then - 只有.pipe

function doStuff() { 
    promptAsync("What url you want to fetch?").then(function (url) { 
    return $.get(url) 
    }).then(function (contents) { 
    return confirmAsync("Here are the contents " + contents + ". Is this ok?") 
    }).then(function (confirmation) { 
    if (!confirmation) { 
     return doStuff(); 
    } 
    return alertAsync("I am glad you are happy with these results"); 
    }); 
} 

此平行同步相当于:

function doStuff() { 
    var url = prompt("What url you want to fetch?"); 
    var contents = $.get(url); 
    var confirmation = confirm("Here are the contents " + contents + ". Is this ok?"); 
    if (!confirmation) { 
    doStuff(); 
    } else { 
    alert("I am glad you are happy with these results"); 
    } 
} 

当然,即使1.8后,任何错误抛出将不会从承诺.fail可用,但相反,崩溃的页面。