- 主题:现在你们写 js 还会在发布的时候转成 es5 吗?
之前我已经看过 rxjs 了,但我不喜欢这种风格的编程方式。
上面的讨论已经讲了很多 js 函数式编程的缺陷。最大的缺陷没说,函数式编程晦涩难懂,回调又回调,跟 goto 差不多。
奇怪 js 连尾递归、纯函数都没正经地支持,搞函数式编程是几个意思。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 可以先看下rxjs/saga的简介,本身这些问题是已经被解决的不错的问题了……
: 发自「今日水木 on iPhone X」
--
FROM 110.85.22.*
多个异步这种kill不好做吧
let a = await http.get(1);
let b = await storage.get(a);
xxx
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 之前我已经看过 rxjs 了,但我不喜欢这种风格的编程方式。
: 上面的讨论已经讲了很多 js 函数式编程的缺陷。最大的缺陷没说,函数式编程晦涩难懂,回调又回调,跟 goto 差不多。
: 奇怪 js 连尾递归、纯函数都没正经地支持,搞函数式编程是几个意思。
: ...................
--
FROM 123.127.43.*
在 get(1) 和 storage.get(a) 里面由协程库抛出一个特殊的异常。在最外层捕获并丢弃。所以需要一个 $spawn() 这样的函数,用于管理协程。
【 在 shaolin (我的大小宝贝儿...) 的大作中提到: 】
: 多个异步这种kill不好做吧
: let a = await http.get(1);
: let b = await storage.get(a);
: ...................
--
FROM 110.85.22.*
你这个只是相当于终止当前任务池的任务吧,正在执行task无法像abort那样cancel
掉吧?
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 在 get(1) 和 storage.get(a) 里面由协程库抛出一个特殊的异常。在最外层捕获并丢弃。所以需要一个 $spawn() 这样的函数,用于管理协程。
--
FROM 123.127.43.*
比如, 下面这段saga代码, 你的协程库准备咋个支持法
function* task1() {
yield delay(1000);
console.log('hello task1');
}
function* task2() {
yield delay(2000);
console.log('hello task2');
}
function* task3() {
yield delay(3000);
console.log('hello task3');
}
function* task() {
yield spawn([task1, task2, task3]);
console.log('hello task');
}
function* uiHandler() {
let task = yield fork(task);
let input = yield take('user-input');
if (input == '1') {
yield cancel(task);
}
}
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 之前我已经看过 rxjs 了,但我不喜欢这种风格的编程方式。
: 上面的讨论已经讲了很多 js 函数式编程的缺陷。最大的缺陷没说,函数式编程晦涩难懂,回调又回调,跟 goto 差不多。
: 奇怪 js 连尾递归、纯函数都没正经地支持,搞函数式编程是几个意思。
: ...................
--
修改:pangwa FROM 101.85.232.*
FROM 101.85.232.*
js 世界里有几种工具,一种是 transpiler,比如 babel.js,可以把翻译许多新语法翻译成老语法。另外一种是 polifill,现在最流行的应该是 corejs,就是给不支持新语法的浏览器尽量打补丁,但是有些是补不出来的,比如 Proxy。还有一个工具是 browserslist,它的作用是给定一定的规则,它负责算出来哪些语法不需要翻译。
虽然也可以完全自己从头搭,但是这年头随便找个 boilerplate、create-xxx-app 之类的前端库,要么带个 .browserslistrc 文件,要么直接放在 package.json 里面,你只要填想支持什么浏览器就可以了,根本不是需要额外操心的
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 你们现在是不是已经彻底不支持 chrome 以外的浏览器了?
--
FROM 115.188.159.*
我之前想的是,把task1~3包起来,加上cancel、error等
多个任务用迭代器,可随时start cancel error等
其他的还没细想。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 比如, 下面这段saga代码, 你的协程库准备咋个支持法
: function* task1() {
: yield delay(1000);
: ...................
--
FROM 123.127.43.*
一样的写法啊。。async function 其实就是 function *,yield 相当于 await. 字对字直接替换你上面那段代码就是我打算做的协程库。
但 yield 和 await 有些隐秘的区别。所以以前用 generator 搞协程会有一些问题。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 比如, 下面这段saga代码, 你的协程库准备咋个支持法
: function* task1() {
: yield delay(1000);
: ...................
--
FROM 110.85.22.*
如果你的网络请求指的是 fetch api 的话,目前有 AbortController.abort,沿用了使用更广的 axios 思路,提供一个额外的参数对象,调用 signal.abort() 来 reject。另外不是很清楚你的 js coroutine 有什么具体应用,目前 js 多线程交互是靠发消息完成,能传的数据类型有限。所以有复杂需求的话,用其它语言写编译成 wasm 更常见一些,不然发消息的 overhead 就有得受了
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 这个是 http client 库啊。。我想处理的不止是网络请求。而且我想用 async/await,而不是 promise/generator.
: 如果我写一个支持 cancel 的 coroutine 库,是不是 js 社区的空白?
--
FROM 115.188.159.*
可以给个demo么, 比如怎么cancel... 基于现有语言特性, 感觉用async/await实现不出来啊..
【 在 hgoldfish (老鱼) 的大作中提到: 】
一样的写法啊。。async function 其实就是 function *,yield 相当于 await. 字对字直接替换你上面那段代码就是我打算做的协程库。
但 yield 和 await 有些隐秘的区别。所以以前用 generator 搞协程会有一些问题。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 比如, 下面这段saga代码, 你的协程库准备咋个支持法
: function* task1() {
: yield delay(1000);
: ...................
--
FROM 101.85.232.*