我還沒有完全理解承諾,所以如果這是一個簡單的誤解道歉。如何正確鏈接條件(?)承諾與Q.js
我有一個刪除頁面上的項目的功能,但我有一個具體的行爲取決於頁面的狀態。 Psuedo代碼明智的是這樣的:
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
希望這是有道理的。基本上,如果有變化,數據必須先保存。然後,如果數據已保存,或者如果沒有更改,請提示用戶確認刪除。問題是我使用杜蘭達和微風,我似乎無法鏈接他們正確迴歸的承諾。
我的功能目前看起來像這樣,我知道這是錯誤的,但我努力找出解決的辦法。
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,然後如有必要調用保存並解決它。 然後,在該條件部分完成解析後,調用第二個提示,然後解決其中的所有承諾。
對不起,我不認爲這是超清晰的,但這也是我認爲來自我並不完全遵循這裏的鏈條的事實。
任何幫助非常感謝!謝謝。
我已經標記了這個答案,因爲我基本上使用了所有這些代碼,但是就我所見,每個人的答案基本上都是正確的。 – Adam
關於這個約定,我知道自我「模式」是應該如何完成的,但不幸的是,我發現了一種情況,我無法讓自我和封閉正常工作。然後我在發現綁定後修復了它,並且因爲它的工作而卡住了。不是很好。 – Adam