2014-11-24 25 views
1

我試圖鏈接兩個函數test1和test2需要完成(第一個test1,然後test2)之前第三個函數被調用。我無法應用承諾/延期模式在jQuery的。誰能幫忙?如何正確使用承諾/延期模式

function test1(){ 
setTimeout(function() { 
     console.log("test1"); 
     return 1 
}, 10000); 
} 

function test2(){ 
setTimeout(function() { 
     console.log("test2"); 
     return 2 
}, 10000); 

} 


var promise1 = test1().promise(); 
var promise1 = test2().promise(); 

when(
promise1, 
promise2 
).then(function(a,b) { 
console.log("test1 and test2 done"); 
}); 

回答

3

你有沒有在你的代碼中使用的任何承諾框架...

一種方法是使用jQuery Deferred()

function test1() { 
 
    //create a deferred object 
 
    var deferred = $.Deferred() 
 
    setTimeout(function() { 
 
    //once the taks is completed mark the promise as resolved 
 
    deferred.resolve(1); 
 
    }, 2000); 
 
    //return the promise object 
 
    return deferred.promise(); 
 
} 
 

 
function test2() { //create a deferred object 
 
    var deferred = $.Deferred() 
 
    setTimeout(function() { 
 
    //once the taks is completed mark the promise as resolved 
 
    deferred.resolve(2); 
 
    }, 1000); //return the promise object 
 
    return deferred.promise(); 
 
} 
 

 

 
var promise1 = test1(); 
 
var promise2 = test2(); 
 

 
$.when(promise1, promise2).then(function(a, b) { 
 
    console.log("test1 and test2 done", a, b); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>


其他可能承諾的解決方案是

+0

我可以問一個問題。假設test2()的執行依賴於上次test1()的成功完成。我將如何創建某種執行鏈? – Jabb 2014-11-24 12:43:17

+0

@Jabb http://jsfiddle.net/huoz17kq/1/ – 2014-11-24 12:49:21

+0

非常感謝,非常好。 – Jabb 2014-11-24 12:53:57