Generator 使用 Promise(发送请求)
async/await是generator的语法糖。 下面是generator的用法
Generator基本用法
创建一个生成器,写法如下
// 写法1
function *fn1() {}
// 写法2
function* fn2() {}
// 错误写法
function*fn3() {}
生成器使用, 内部需要使用yied关键字,之后需要用next()方法来对生成器进行迭代
function *fn1() {
yied 1
yied 2
}
let f = fn1()
console.log(f.next())
console.log(f.next())
console.log(f.next())
next()方法返回的是一个对象,对象中包含value和done两个属性,value是返回值,done是用来判断是否进行下一次迭代,true为不进行,value返回值为undefined。
输出结果:
解决异步请求
// 模拟接口请求
function req (i) {
return new Promise(function(res, rej){
setTimeout(function(){
res({
code: '200',
data: i
})
}, 1000)
})
}
console.log('start-------------')
let result = '' // 返回结果
function *syncFn() {
yield req(1).then(res => {
result = res.data;
console.log(res.code, res.data, 'result',result);
syncObj.next() // 在这里调用 不然获取不到resulte的值
})
console.log(result, '123456')
yield req(result+1).then(res => {console.log(res.code, res.data, '2')})
}
let syncObj = syncFn()
syncObj.next()
console.log('-------------------')
PS: 在工作中不常用