let axios = require("axios")
var co = require('co');
/**
* 实现简单的Co 模块 自动执行next
*/
let step1 = () => {
return axios.get('https://movie2.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0', {
params: {
ID: 12345
}
})
}
let step2 = () => {
return 'hello,world'
}
let step3 = () => {
return () => {
return 'My is Function'
}
}
function MyCo(generator) {
let generators = generator()
return new Promise(function (resolve, reject) {
function next(nextValue) {
try {
if (nextValue.done) {
resolve()
return;
}
if (!next.done) {
//如果是函数直接返回内部函数供generator自行处理
if (typeof nextValue.value === 'function') {
//回复yield 将执行指向下一个函数执行,并将nextValue.value当作结果返回
next(generators.next(nextValue.value))
}
//如果是字符串直接将字符串返回
if (typeof nextValue.value == 'string') {
next(generators.next(nextValue.value))
}
//判断是否是Promise异步使用
if (Object.prototype.toString.call(nextValue.value) == '[object Promise]') {
nextValue.value.then((res) => {
next(generators.next(res.data))
}).catch((error) => {
//异常处理
reject(error)
})
}
}
} catch (err) {
console.log(err)
}
}
next(generators.next())
})
}
function* f() {
let FnString = yield step3()
console.log(FnString()) //My is Function
let res = yield step1();
console.log(res)
let string = yield step2()
console.log(string) //hello,world
}
MyCo(f).then(() => {
console.log('执行结束')
}).catch((error) => {
console.log('异常捕获')
console.log(error)
})