解決済みまたは拒否済みの約束として返されるコードを取得しました。ユーザー入力に基づいてJQuery約束を解決する方法
var runChecks = function(hasClickId, maxClicksModeIsNotOff) {
var dfd = $.Deferred();
clickIdCheckPassed = hasClickId; // equals false
maxClicksCheckPassed = maxClicksModeIsNotOff; // equals false
if (!clickIdCheckPassed) {
clickIdCheckPassed = runClickIdCheck();
}
if (!maxClicksCheckPassed) {
maxClicksCheckPassed = runMaxClicksCheck();
}
if (maxClicksCheckPassed && clickIdCheckPassed) {
dfd.resolve('Resolved');
} else {
dfd.reject('rejected');
}
return dfd.promise();
};
機能runClickIdCheck()
とrunMaxClicksCheck()
ユーザーの入力を収集し、それに基づいて、true
またはfalse
のいずれかを返します。
if (maxClicksCheckPassed && clickIdCheckPassed) {
dfd.resolve('Resolved');
} else {
dfd.reject('Rejected');
}
しかし、問題は、コードがユーザーの入力を待たないということであり、各時間が評価されますので、条件 - 両方の結果の値がtrue
をしている場合、私はそれ以外の場合は拒否しなければならない、約束を解決する必要がありますユーザが何らかの入力をした後でさえ、「却下された」と約束する。以下のようrunClickIdCheck
機能がどのように見えるか参考のため
が、これは次のとおりです。期待どおりに動作し、私はこのコードを作ることができますどのように
var runClickIdCheck = function() {
bootbox.confirm('Are you sure?', function(result) {
if (result) {
return true;
}
});
return false;
};
私は「解決」への約束を評価するように、場合にのみ、ユーザの入力に依存する機能どちらも真実を返しますか?
編集:
期待されるUIの動作は、ユーザが二回の対話を確認した場合にのみ、フォームが提出されなければならないということである。
$form.submit(function(e) {
e.preventDefault();
$.when(runChecks(hasClickId, maxClicksModeIsNotOff)).then(
function(status) {
$form.submit()
},
function(status) {
return false;
}
);
}
私は約束のintefaceをを行うだろうと思った理由ですジョブ。 runClickIdCheck()
とrunMaxClicksCheck()
がtrue
と評価された場合、約束は解決されます。
私はあなたが約束を誤っていると思います。あなたの小切手は完全に同期しているように見えるので、(たとえ可能であっても)それを約束のセマンティクスに振り分けるのに本当に必要*ではありません。あなたがそれを実行する必要があるときにだけ、チェックを実行してください。解決しようとする問題、つまり実装しようとしているUIの動作について詳しく説明します。また、それを示すために必要なマークアップを追加します。 – Tomalak
@Tomalak 'runClickIdCheck'メソッドが非同期であるように見えます。 OPは適切なコールバックのロジックを設定する必要があります。このプラグインメソッドは(私には分かりませんが)約束インタフェース –
@ A.Wolffを処理します。 – Tomalak