function * fun(arg) {
console.log(arg);
let one = yield'耳朵'
console.log(one);
// console.log(111);
yield'眼睛'
// console.log(222);
yield'真奇怪'
// console.log(333);
}
let iterator = fun('aaa')
// console.log(iterator);
console.log(iterator.next());
console.log(iterator.next('BBB'));
console.log(iterator.next());
console.log(iterator.next());
for(v of fun()) {
console.log(v);
}
生成器:
- 是一个特殊函数,用于进行异步编程;声明:function * 函数名() {};使用的时候用一个变量接受,返回结果是一个迭代器对象,不可以直接调用,可以借用里面的返回变量.next()来进行运行:名称.next();
- yield:算作函数代码的分隔符,将代码分隔成一块块的,通过每调用一次next()来依次向下输出;可以使用for of遍历函数内代码块,调用的是yield后面的表达式;
- 生成器函数参数:生成器参数和函数一样正常传参,next方法也可以传递参数,第二次调next方法传入的实参将作为第一个yield的返回结果;
let p = new Promise((res,rej) => {
setTimeout(function() {
const data = '回调成功'
const faild = '回调失败'
const index = 0
if(index === 1) {
res(data)
} else {
rej(faild)
}
console.log(res,rej);
},1000)
})
let result = p.then(value=> {
console.log(value);
return new Promise((res, rej) => {
res('成功')
// rej('失败')
})
}, reason => {
console.log(reason);
})
console.log(p);
console.log(Promise);
console.log(result);
promise:
- 异步编程新的解决方案;语法上Promise是一个构造函数;函数内部封装异步操作,返回成功或失败;类似使用该构造函数创建一个实例对象,Promise本身有一个蚕丝为回调函数,它的参数是resolve表示成功,reject表示失败,每次执行只能是两者中的其中一个;
- Promise的then方法参数是两个回调函数,第一个回调函数参数为value,第二个回调函数reason;前面函数调用成功就会回调第一个回调函数,失败就会回调第二个函数;
- then方法:返回结果是Promise对象,对象状态由函数的执行结果决定;1.如果回调函数中返回的结果是非Promise类型的属性,状态为成功,返回的值为对象的成功的值;2.返回是Promise对象,这个Promise的状态,就决定前者的返回状态,两者的成功和失败的值是一样的;
- catch方法:参数为回调函数,和then的参数第二个回调函数一样;