- 主题:现在你们写 js 还会在发布的时候转成 es5 吗?
async await根本就没有任务的取消一说啊
如果你是说的rxjs, unsubscribe()就搞定了
如果这是你的coroutine框架要实现的功能, 怎么兼容现有的promise库并实现cancel呢.
【 在 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.*
async/await 底层当然用 promise,这我知道。。但那是 babel 的脏活,跟程序员没关系。里面当然维护一个 context, 但程序员看不到。搭配 const/let/var 语义清晰很多。总之呢,async/await 是 js 的新语法,你们不要太排斥啊。
如果想要实现同样的功能,这个维护 context 的工作就得让程序员自己来做了。
state 变量只是一个例子,不要深究它的使用场景。上面的演示应该足够让你清楚回调函数与 await 的区别了吧。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 这是两种解决问题的方式, 非要用全局的scope, 在流式处理中实现, 肯定也可以, 无非是把context显式传递, 或者通过闭包传递上下文.
: async await翻译成es5的代码基本就是刚才的promise写法, 本身语义上是一致的, 在await/async 之后创建的变量实际上并不是产生在上一层的context里, 而是在await/async 又产生了一个新的context, 后面的所有代码都在新的context中
: 而且你这个state如果要想全局用, 肯定是要在前面声明的, 如果是在后面用, 那就是在新的context中使用, 并不是全局的.
: ...................
--
FROM 110.85.22.*
这段代码, 翻译成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.*
只要是国际标准正式文件里的
啥花里胡哨的高级功能能用的都用上啊
草案里的不用
【 在 hgoldfish 的大作中提到: 】
: 我也坚持 firefox,不过 firefox 对标准的支持倒还好。
: 我是想问,现在大家写 web/js/css 代码的时候,是怎么考虑兼容性的。
: 另外大家使用一些高级功能吗?
: ...................
--
FROM 60.1.4.*
async await有啥要排斥的... 我们都用多少年了...
但现在我们大多都转向了要么是saga, 要么是rxjs, 不过在一些小的项目上倒是直接用了async/await多一些
【 在 hgoldfish (老鱼) 的大作中提到: 】
: async/await 底层当然用 promise,这我知道。。但那是 babel 的脏活,跟程序员没关系。里面当然维护一个 context, 但程序员看不到。搭配 const/let/var 语义清晰很多。总之呢,async/await 是 js 的新语法,你们不要太排斥啊。
: 如果想要实现同样的功能,这个维护 context 的工作就得让程序员自己来做了。
: state 变量只是一个例子,不要深究它的使用场景。上面的演示应该足够让你清楚回调函数与 await 的区别了吧。
: ...................
--
FROM 58.246.6.*
我知道现在的 async/await 没有实现。。不过我能搞定不用太操心。所以我才说要搞一个新的 coroutine 库出来嘛。想问问有没有同类型的,值不值得我花费两三个周末的时间。
unsubscribe() 只是看不见看不见不存在不存在,实际后台的 ajax 请求还在接收数据。如果是比较大一点的文件,多占带宽啊。正确的姿势其实应该调用 XMLHttpRequest.abort() 中断请求才对。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: async await根本就没有任务的取消一说啊
: 如果你是说的rxjs, unsubscribe()就搞定了
: 如果这是你的coroutine框架要实现的功能, 怎么兼容现有的promise库并实现cancel呢.
: ...................
--
FROM 110.85.22.*
rxjs本身都处理了, 基于rxjs的http库 这种http请求的取消是基本功能啊.... 真心没啥特别的0,0
包括saga, 在saga被取消时cancel相应的请求都是基本姿势.
只有async await原生不支持, 实现又麻烦, 所以搞的人才少,
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 我知道现在的 async/await 没有实现。。不过我能搞定不用太操心。所以我才说要搞一个新的 coroutine 库出来嘛。想问问有没有同类型的,值不值得我花费两三个周末的时间。
: unsubscribe() 只是看不见看不见不存在不存在,实际后台的 ajax 请求还在接收数据。如果是比较大一点的文件,多占带宽啊。正确的姿势其实应该调用 XMLHttpRequest.abort() 中断请求才对。
--
FROM 58.246.6.*
这种函数式编程确实不太懂,,我还想问一下,这个 timeout 能 cancel http.get(url1) 是肯定的,也能 cancel http.get(url2, r1.data) 吗?
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 这段代码, 翻译成rxjs应该类似于
: http.get(url1)
: .pipe(tap(() => sleep(1000)),
: ...................
--
FROM 110.85.22.*
是的, 确定可以
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 这种函数式编程确实不太懂,,我还想问一下,这个 timeout 能 cancel http.get(url1) 是肯定的,也能 cancel http.get(url2, r1.data) 吗?
--
FROM 58.246.6.*
我的想法是有了 async/await 以后,这些 rxjs/saga 等等使用 promise 的库全都可以休了!
只是现在 js 社区显然还没有做好准备。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: async await有啥要排斥的... 我们都用多少年了...
: 但现在我们大多都转向了要么是saga, 要么是rxjs, 不过在一些小的项目上倒是直接用了async/await多一些
--
FROM 110.85.22.*