我正在努力更好地掌握jQuery的承诺。我创建了一个玩具问题/ repro(重新发明验证轮,用于学习目的),如下所示:
$(function() {
"use strict";
function isStep1Valid() {
return !!$("input").val();
}
function leaveStep1() {
if (!isStep1Valid()) {
return $.when(null).fail(); // <-- A. this seems off
}
return $(".step1").slideUp().promise();
}
function enterStep2() {
return $(".step2").slideDown().promise();
}
function handleFail() {
return $(".step1 .error").slideDown().promise();
}
function handleClick() {
leaveStep1()
.fail(handleFail) // <-- B. this seems off
.done(enterStep2);
}
$("button").on("click", handleClick);
});
.step { background-color: #ddd; padding: 10px; }
.hidden { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="step step1">
Step 1
<input placeholder="enter anything">
<button>next</button>
<div class="error hidden">ERROR!</div>
</div>
<div class="step step2 hidden">
Step 2...
</div>
目前,在上面:
我认为我在A和B做的不正确,但我不知道如何解决这个问题。哎呀,我甚至不确定我的问题的正确搜索条件或问题标题是什么。
哎呀,我甚至可能有一个XY问题,但是我只是看不出“X”是什么。接近“X”的东西/我正在努力工作的原始事物: