【发布时间】:2016-10-20 05:53:46
【问题描述】:
我一直在我的 Typescript 项目(针对 es6)中研究一个有趣的问题。基本上,我希望能够以某种未确定的顺序快速定义许多不同系列的用户输入“页面”,以及前一页的结果可能对下一个“页面”的构建有影响,也可能不影响。
因此,我将每个页面视为由函数(此处为 getPromise1() 等)构造的 Promise,一旦用户输入完成,该函数就会解析为结果。然后我使用 async/await 按顺序创建页面。
async process() {
let result1 = await this.getPromise1();
let result2 = await this.getPromise2(result1.someData);
//etc...
this.commit();
}
这很好用,但是我遇到了障碍。页面序列可以在任何阶段通过用户输入取消,因此此时需要中止构建。问题是,在每个阶段检查是否取消变得令人厌烦和不雅,而且我强烈地觉得走错路了。
async process() {
let result1 = await this.getPromise1();
if (result1.cancelled) {
this.revert();
return;
}
let result2 = await this.getPromise2(result1.someData);
if (result2.cancelled) {
this.revert();
return;
}
//etc...
this.commit();
}
我哪里出错了?我是否为这种设置使用了完全不正确的模式?有没有更优雅的方法来处理这种方法?还是真的没有更好的方法来处理这样的事情?
【问题讨论】:
-
仅供参考,
async/await不是 ES7 的一部分。
标签: typescript async-await es6-promise