私は約束を完全に理解していないので、これが単純な誤解である場合にはお詫び申し上げます。Q.jsで条件付き(?)約束を正しく連結する方法
私はページ上のアイテムを削除する機能を持っていますが、私はページの状態によって特定の動作があります。擬似コードそれはこのようなものです:
Does the page have changes?
If yes - prompt to save changes first
If yes - save changes
If no - exit function
If no - continue
Prompt to confirm delete
If yes - delete item and reload data
If no - exit function
うまくいけばいいと思います。基本的に変更があった場合は、まずデータを保存する必要があります。データが保存されている場合、または変更がない場合は、削除を確認するようにユーザーに指示します。問題は、私がdurandalとbreezeを使っていることです。彼らが正しく返す約束をつなぐことはできません。
私の関数は現在、これは私が間違っていると知っているように見えますが、私はそれを修正する場所を見つけ出すのに苦労しています。デュランダルから
if (this.hasChanges()) {
app.showMessage('Changes must be saved before removing external accounts. Would you like to save your changes now?', 'Unsaved Changes...', ['Yes', 'No'])
.then(function (selectedOption) {
if (selectedOption === 'Yes') {
return this.save();
} else {
Q.resolve()
}
});
}
app.showMessage('Are you sure you want to delete this item?', 'Delete?', ['Yes', 'No'])
.then(function (selectedOption) {
if (selectedOption === 'Yes') {
item.entityAspect.setDeleted();
datacontext.saveChanges()
.then(function() {
logger.logNotificationInfo('Item deleted.', '', router.activeInstruction().config.moduleId);
Q.resolve(this.refresh(true));
}.bind(this));
}
}.bind(this));
app.showMessageコールは約束を返し、その後、this.saveは約束を返し、最後にthis.refreshも約束を返します。
だから、hasChangesをチェックし、必要に応じてsaveを呼び出して解決する必要があると思います。 その後、その条件付きセクションの解決が完了したら、2番目のプロンプトを呼び出して、その中のすべての約束を解決します。
申し訳ありませんがこれは非常に明確だとは思わないが、それは私がここのチェーンを完全にフォローしていないという事実から来ているとも思う。
ご迷惑をおかけして申し訳ありません。ありがとう。
私は基本的にこのコードをすべて使用していたので、これを答えとしてマークしましたが、みんなの答えは本質的に正しい限りです。 – Adam
このコンベンションに関して、私は自分自身のパターンは、どうやってやろうとしているのか知っていますが、残念ながら私は自分自身とクロージャが正しく動作することができない状況を発見しました。それで、バインドについて調べた後に修正しました。素晴らしいことではありません。 – Adam