나는이 약속을 완전히 이해하지 못했기 때문에 간단한 오해 일 경우 사과드립니다.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
바라건대 말이 되겠지. 기본적으로 변경 사항이있는 경우 데이터를 먼저 저장해야합니다. 그런 다음 데이터가 저장되었거나 변경 내용이없는 경우 사용자에게 삭제를 확인하라는 메시지가 표시됩니다. 문제는 내가 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));
는 durandal에서 app.showMessage 호출은 다음 this.save이 약속을 반환하고, 마지막으로 this.refresh는 약속을 반환 약속을 반환합니다.
그래서 hasChanges를 확인한 다음 필요한 경우 save를 호출하여 해결해야합니다. 그런 다음 조건부 섹션에서 해결이 완료되면 두 번째 프롬프트를 호출하고 그 안에있는 모든 약속을 해결하십시오.
죄송 합니다만 이것이 명확하지 않다고 생각합니다.하지만 사실은 여기에서 사슬을 완전히 따르지 않고있는 것 같습니다.
많은 도움을 주셨습니다. 감사.
기본적으로이 코드를 모두 사용했기 때문에이를 답변으로 표시했습니다.하지만 모든 사람들의 대답은 본질적으로 정확합니다. – Adam
이 대회에 관해서, 나는 자기 패턴이 그것이 어떻게 이루어져야 하는지를 안다. 그러나 불행하게도 나는 자기와 클로저가 올바르게 작동하지 못하는 상황을 발견했다. 그런 다음 바인드에 대해 알아 낸 후 수정했습니다. 효과가있어 막혔습니다. 별로. – Adam