看YouTube上面Netflix的人在吹RxJS 连ng2也endorse了RxJS HTTP都默认使用RxJS啊
不过RxJS吹了半天就是把event、promise和普通的代码用一套函数重新包装了一下 作为一个函数链条实例来管理
相对于async/await而言 特点无非就是可以cancel
实际上RxJS和含有多个await的async函数等效 但区别在于async/await通常是作为函数而不是作为实例存在的
在某些情况下 比如auto-complete或者LBS当中的map-bounds-changed 需要延时处理 RxJS作为单个实例的优势就表现出来了 它可以管理已经启动的异步函数链条 可以把上一次启动但执行到一半的链条cancel掉 async/await天生缺乏cancel的能力 要管理起来也比较麻烦
更极端的情况就是用户点了一些按钮 然后Component A开始了一些异步请求 但是这是用户又退回到上一级界面 这些异步请求应该被终止 而不是执行到结束 这些就是async/await在设计上的天生缺陷
所以async/await在设计上应该提供把关联到一个Class实例(Controller)上的所有async管理起来的方案 然后在Class的dispose阶段把所有未完成的Promise都取消掉
所以实际上Promise是应该加入cancel机制
public async onKeyDown(){
await DoFirst();
DoSecond();
await DoThird();
await DoFourth();
await DoLast();
}
Greeter.prototype.DoSomething = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, DoFirst()];
case 1:
_a.sent();
DoSecond();
return [4 /*yield*/, DoThird()];
case 2:
_a.sent();
return [4 /*yield*/, DoFourth()];
case 3:
_a.sent();
return [4 /*yield*/, DoLast()];
case 4:
_a.sent();
return [2 /*return*/];
}
});
});
};
--
FROM 110.23.10.*