Jquery 承诺和没有承诺时 Ajax

Jquery Promise & When without Ajax

我正在绞尽脑汁想弄清楚如何正确使用它。大多数示例都使用 ajax,所以这可能是不可能的。

在我的例子中,我创建了一个函数,它淡出一个元素。我知道 .fadeOut 可以有一个回调,但我想避免这种情况只是为了学习目的。

我读到我需要 return 一个承诺,否则 $.when().done() 会立即触发。即使我附加了一个承诺,它仍然会立即触发。

这是我的简单代码

function hide() {
    return $("#element").fadeOut(250).promise();
}

$.when( hide() ).done(function(){
    alert("Hidden");
});

是否有某些方法不能与 $.when() 一起使用,例如 .fadeOut()

任何有助于理解的帮助都会很棒。

我不是 promises 方面的专家,但您似乎不需要 return promise。

https://api.jquery.com/promise/

https://jsfiddle.net/6mLshe77/

function hide() {
    return $("#element").fadeOut(1000);
}

$.when( hide() ).done(function(){
    alert("Hidden");
});

您应该重新安排 .done() 的位置。 https://jsfiddle.net/6mLshe77/7/ hide() 函数被立即调用,无需等待 $.when( hide() ).done(function(){alert("Hidden");})

click 事件

var div = $("<div/>").attr({
  id: "element"
});

$("button").on("click", function() {
  $("#wrapper").append(div);
  hide().done(function() {
    alert("Hidden");
  });
})

function hide() {
  return $("#element").fadeOut(1000).promise();
}
div {
  width: 100px;
  height: 100px;
  border: 1px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="wrapper"></div>

<button>
  Click Me
</button>

jsfiddle https://jsfiddle.net/6mLshe77/9/