有的东西被遗忘,有的东西销声匿迹,有的东西死了,而其中几乎不含有悲剧性因素。——《寻羊冒险记》

今天用typescript写了个Generator函数自动执行器:

1
2
3
4
5
6
7
8
9
10
11
export function runGenAuto(fn: Function) {
let gen: Generator<Function> = fn()
function next() {
let result = gen.next()
if (result.done) {
return result.value
}
return result.value(next)
}
return next();
}

为了测试效果,我们定义一个Generator函数,这个函数用于将URLSearchParams转换成一般对象

当然直接遍历不用generator也能实现上述需求,但这里主要是为了测上方的自动执行Generator函数的效果

1
2
3
4
5
6
7
8
9
10
interface Param {
[key: string]: any
}
export function* transferToObj(params: URLSearchParams) {
let result: Param = {};
for (let [key, value] of params.entries()) {
yield (next: Function) => next(result[key] = value)
}
return result
}

使用时传入对应的Thunk函数即可

1
2
let params = runGenAuto(() => transferToObj(new URLSearchParams("q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4")))
console.log(params)

打印结果:

img