Я до сих пор не получил полного понимания promises, так что извиняюсь, если это простое недоразумение.
У меня есть функция для удаления элемента на странице, но у меня есть определенное поведение в зависимости от состояния страницы. В коде 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
Надеюсь, это имеет смысл. По сути, если есть изменения, данные должны быть сохранены первыми. Затем, если данные были сохранены или если не было никаких изменений для начала, попросите пользователя подтвердить удаление. Проблема в том, что я использую durandal и breeze, и я не могу заставить цепочку promises правильно возвращаться.
Моя функция в настоящее время выглядит так, что я знаю неправильно, но я изо всех сил пытаюсь решить, где ее исправить.
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 от durandal возвращает обещание, затем this.save возвращает обещание, и, наконец, this.refresh также возвращает обещание.
Итак, я думаю, мне нужно проверить hasChanges, затем, если необходимо, сохранить вызов и разрешить его. Затем, после того, как условная секция завершит решение, вызовите второе приглашение и затем разрешите все promises внутри этого.
Извините, я не думаю, что это очень ясно, но я тоже думаю, что я не полностью слежу за цепями здесь.
Любая помощь очень ценится! Спасибо.