我希望能夠理解爲什麼我在試圖鏈接延遲對象時得到不同的行爲,而不是嘗試通過將對象保存在變量中並調用一個或多個延遲方法那個變量。
將對象保存在變量中時,發送到每個函數的值是相同的(在下面的代碼片段中,5) - 即在這種情況下值不會過濾。當直接鏈接時,值過濾器...所以我不清楚如何在幾個不同的語句中設置Deferred.pipe()
時發生過濾。和我的jquery docs的閱讀,它應該是可能的:
遞延對象是可鏈接的,類似於一個jQuery對象是可鏈接的方式,但它有自己的方法。創建Deferred對象後,可以使用以下任何方法,直接從對象創建鏈接或將對象保存在變量中,並在該變量上調用一個或多個方法。
我在做什麼錯?
這裏是我的代碼:
<script type="text/javascript">
$(document).ready(function() {
// This works as expected - alert(20)
var defer = new $.Deferred();
defer.pipe(myFunction).pipe(myFunction).pipe(myAlert);
defer.resolve(5);
// This does not work as expected - alert(5)
var defer2 = new $.Deferred();
defer2.pipe(myFunction);
defer2.pipe(myFunction);
defer2.pipe(myAlert);
defer2.resolve(5);
});
var myFunction = function (value) {
return value * 2;
}
var myAlert = function (value) {
alert('The value is ' + value);
}
</script>
這可能是一些操作返回一個新的承諾(如'.pipe()'),因此鏈接將操作新返回的對象。 – jfriend00