jquerypromise&;如果没有Ajax

jquerypromise&;如果没有Ajax,jquery,promise,.when,Jquery,Promise,.when,我绞尽脑汁想弄清楚这是如何正确使用的。大多数示例都使用ajax,所以这可能根本不可能 在我的示例中,我创建了一个函数,它淡出一个元素。我意识到,.fadeOut可以有回调,但我希望仅出于学习目的避免回调 我读到我需要返回一个承诺,否则$。when().done()会立即启动。即使我附加了一个承诺,它仍然会立即开火 这是我的简单代码 function hide() { return $("#element").fadeOut(250).promise(); } $.when( hide(

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

在我的示例中,我创建了一个函数,它淡出一个元素。我意识到,
.fadeOut
可以有回调,但我希望仅出于学习目的避免回调

我读到我需要返回一个承诺,否则
$。when().done()
会立即启动。即使我附加了一个承诺,它仍然会立即开火

这是我的简单代码

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

$.when( hide() ).done(function(){
    alert("Hidden");
});
是否有某些方法不能与
$.when()
一起使用,例如
.fadeOut()


任何有助于理解的东西都会很棒

我不是承诺方面的专家,但你似乎不需要回报承诺


您应该重新安排
.done()
的位置。在
hide()
处立即调用函数,无需等待
单击
$处的事件。当(hide()).done(函数(){alert(“Hidden”);})

var div=$(“”).attr({
id:“元素”
});
$(“按钮”)。在(“单击”,函数(){
$(“#包装”).append(div);
hide().done(函数()){
警惕(“隐藏”);
});
})
函数hide(){
返回$(“#元素”).fadeOut(1000.promise();
}
div{
宽度:100px;
高度:100px;
边框:1px纯黑;
}

点击我

$。延迟的
将非常棒,“即使我附加了一个承诺,它仍然会立即启动。”注意,
淡出的持续时间仅为
250ms
at
js
;是否尝试增加
持续时间
.fadeOut()
?预期的结果是什么?@NorlihazmeyGhazali你能解释一下吗?@guest271314是的,我已经增加到10000毫秒,它仍然会立即开火。按下按钮可触发
hide()
函数。我不确定这是否以某种方式导致了问题。如果要向其传递多个参数,则只需在
时使用
$。否则,直接对该参数调用
.done
。好吧,也许我完全错了。是否
$。当()
触发函数时
hide()
?调用
hide()
触发函数,只是
hide()
的返回值是一个延迟对象,它
$。当()
接受作为参数时。因此,一些jquery魔法发生了,然后您可以将
done
fail
方法链接到
$。当
@VIDesignz:“是否
$。当()
触发函数
hide()
?”您所说的“触发器”是什么意思?您正在(正确地)将调用
hide
的返回值传递给
$<代码>$。当
隐藏
函数本身没有任何作用时。@FelixKling那么他的JSFIDLE如何运行隐藏函数而不调用它呢?@FelixKling我现在明白了,我假设
$。when()
可以说更像是一个监听器。正在等待在别处调用
hide()
。我没有意识到,
hide()。我不知道hide()一下子就被调用了。我假设$when()正在“等待”其他地方调用它。@VIDesignz
hide()
$处调用。when()
,不等待
单击
处的事件。可以创建一个
$.Deferred()
对象,该对象在调用
.done()
之前等待延迟解析,但从函数返回jQuery
.promise()
对象时不必这样做
$.when()
$.Deferred(beforeStart)
的别名。另请参见,,@VIDesignz:
()
在函数引用之后(
hide
解析为函数)始终调用该函数。
function hide() {
    return $("#element").fadeOut(1000);
}

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