Open zhuanghaixin opened 3 years ago
function ajax(url, callback) {
// 1、创建XMLHttpRequest对象
var xmlhttp
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest()
} else { // 兼容早期浏览器
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP')
}
// 2、发送请求
xmlhttp.open('GET', url, true)
xmlhttp.send()
// 3、服务端响应
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
var obj = JSON.parse(xmlhttp.responseText)
// console.log(obj)
callback(obj)
}
}
}
function request(url) {
ajax(url, res => {
console.log(res)
})
}
function* gen() {
let res1 = yield request('static/a.json')
console.log(res1)
let res2 = yield request('static/b.json')
console.log(res2)
let res3 = yield request('static/c.json')
console.log(res3)
}
let getData = gen();
console.log(getData.next())
console.log(getData.next())
console.log(getData.next())
console.log(getData.next())
虽然后面console.log()是同步的,但是yiedl表达式是request是异步的,所以还是输出不同的结果
function request(url) {
ajax(url, res => {
getData.next(res) //第二次执行 下一个yield yield request('static/b.json') 第三次执行
})
}
function* gen() {
let res1 = yield request('static/a.json')
console.log(res1)
let res2 = yield request('static/b.json')
console.log(res2)
let res3 = yield request('static/c.json')
console.log(res3)
}
let getData = gen();
console.log(getData.next()) //第一次执行
基本概念
例子2 yield关键字只能在生成器内部使用
例子3 next()不传参数
例子4 next()传参数 yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。
例子5 找到7的倍数的数