【发布时间】:2016-04-25 03:01:00
【问题描述】:
我正在学习 promises/typescript/angular,我想有条件地链接 promises。
这是我的方法的实际状态:
private executePromiseModificationEvenement<T>(edition: Models.CalendrierParametresModelEdition, modeCreation: boolean, deferred: ng.IDeferred<T>) {
var promise: ng.IPromise<Object>;
//Step1
if (modeCreation) {
promise = this.$calendrier.Actions.enregistrerEvenementOutlook(edition);
} else {
promise = this.$calendrier.Actions.modifierEvenementOutlook(edition);
}
if (this.$scope.outlook) {
promise.then((x) => {
if (x != '') edition.idOutlook = x.toString();;
return deferred.resolve();
}, (x) => {
return deferred.reject();
});
} else {
//Step2
promise.then((x) => {
if (x != '') edition.idOutlook = x.toString();
return this.$calendrier.Actions.modifierEvenement(edition);
}, (x) => {
//Ajout MessageBox message error
return this.$calendrier.Actions.modifierEvenement(edition);
})
//Step3
.then((x) => {
if (edition.opportunite != null) this.$rootScope.$broadcast("pushEchangeOpportunite", { idOpportunite: parseInt(edition.opportunite), action: 2, IdContact: edition.id, Libelle: edition.title, StartDate: moment(edition.start).toDate() });
return deferred.resolve();
}, (x) => {
return deferred.reject();
});
}
}
我对 C# 的 async/await 很熟悉,这两者都没有给条件链接带来问题,但我在使用 Promise 时遇到了麻烦。
将 .then 不仅放在创建承诺之后而且放在 if 之后是否正确?
.then 有没有可能因为 promise 已经完成而永远不会被调用?
【问题讨论】:
-
也许这更适合CodeReview?
-
@Script47 不完全是。 OP 希望帮助为其代码添加额外的功能。那将是代码审查的题外话。
-
@Zak OP 实际上并没有提出问题或表示他有任何问题,除了标题中的内容,这听起来就像代码审查请求。
-
@Pak 您缺少的步骤实际上是
return来自任何.then链的最终值[即return promise.then(...)] 没有那个,整个函数将返回一个已经解析的@987654326立即@值。 -
@Alnitak 啊,我的错。这是最后一句话让我震惊。重新阅读后,您似乎是正确的。
标签: javascript angularjs typescript promise angular-promise