執行重複行的「最後/總是」塊。
舉例來說,如果使用$ Q,
var outputPromise = getInputPromise()
.fin(function() {
// close files, database connections, stop servers, conclude tests
});
或者,如果使用jQuery ...
$.get("test.php").always(function() {
alert("$.get completed with success or error callback arguments");
});
或者如果你的代碼不能被結構化使得登錄替代方法可以在流動的承諾鏈,那麼你可以簡單地將兩個登錄函數都移除到一個返回承諾然後鏈接該函數的函數中,如下所示。
http://plnkr.co/edit/nJRaBb04JpLdHicgxg2u?p=preview
<!DOCTYPE html>
<html>
<head>
<script data-require="[email protected]*" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<h1>Hello Plunker!</h1>
<button id="loginBtn">Login</button>
<script>
function login1(){
var $def =$.Deferred();
window.setTimeout(function(){
$def.resolve("loginMethod1");
},1000);
return $def.promise();
}
function login2(){
var $def =$.Deferred();
window.setTimeout(function(){
$def.resolve("loginMethod2");
},1000);
return $def.promise();
}
function login(val){
var $def =$.Deferred();
if(val){
login1().then(function(res){
$def.resolve(res);
});
}
else{
login2().then(function(res){
$def.resolve(res);
});
}
return $def.promise();
}
$("#loginBtn").bind("click",function(){
login(Math.random()>0.5)
.then(function(res){
console.log(res + " ...do everythign else here");
});
});
</script>
</body>
</html>
執行重複行的「最後」 – mccainz 2014-09-23 16:29:57
你可以給我一個例子嗎? – tommyd456 2014-09-23 16:30:28