首先, generator 和 coroutine 都比 callback 更容易编写,这点你同意吧。至少 generator/corotuine 的写法能比 callback 少很多缩进等级。在我看来,js 社区现在流行两空格缩进简直是业界奇葩——callback 导致缩进太多是唯一的解释——五年前的 js 社区可不是这样的。
接下来你可以考虑一下 coroutine 为什么比 generator 先进。我前面说过 generator 有一些隐秘的缺陷。generator 是相对被动的,需要外部调用者调用 .next() 推动它的执行。
我再举一个例子:
funcion *top() { middle() }
function middle() { // call bottom() }
function *bottom() { yield fetch(...) }
这个调用顺序里面,其中的 middle() 不是 generator,为了调用 bottom,你要怎么写。。只好再把这个 bottom() 托管给 saga 这个容器对不对。
容器,说好听点是帮你管理状态,难听点就是程序员思维的牢笼。
而 coroutine 就没有这么麻烦了。直接调用,js 语言会帮你执行它。
所以我搞的这个 qtng 不说自己是框架,只说自己是工具库。你不用它,它就不存在。你用它也非常简单,import 进来,然后调用就行了,这是最简单的一个调用例子:
import { http } from "qtng"
(async () => {
let r = await http.get("/test-data.html");
console.debug(r.json);
})();
多简洁啊。。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 好的好的,首先你说那一堆优雅和吊死的写法不是我的看法,我两种都用。
: 我一直在尝试理解你这么做的实际应用场景是什么(优于现有方案的点在哪),所以问了很多问题。如果只是想给大家介绍下协程0,0,好吧……
: 发自「今日水木 on iPhone X」
: ...................
--
FROM 110.85.22.*