这段代码, 翻译成rxjs应该类似于
http.get(url1)
.pipe(tap(() => sleep(1000)),
flatMap(data1 => http.get(url2, data1)))
.timeout(2000)
.subscribe()
【 在 hgoldfish (老鱼) 的大作中提到: 】
async/await 能做到一次性杀掉嵌套的异步任务。
$spawn(async () => {
let r1 = await http.get(url1);
await $msleep(1000);
let r2 = await http.get(url2, r1.data);
}).timeout(2000);
上面这种写法,不管程序执行到哪个位置都可以杀掉。
转成异步怎么写?只能让 http.get() 这些 promise 托管给框架,不好杀啊。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 这都不是啥特别的啊....
: 你说的这种方法, 一些promise库本身也带了类似功能, 比如bluebird也提供了类似cancel的支持.
: 你举的例子里, 如果有内嵌的异步任务, 它的取消就不好做了, 除非破坏性的封装一些东西进去, 但这样对已有的库兼容性就差了
: ...................
--
FROM 58.246.6.*