generator函数
generator函数基础
function* gen() {
let a = yield 'a';
let b = yield 'b';
return a + b;
}
let it = gen();
let r = it.next();
r = it.next(r.value);
r = it.next(r.value);
console.log(r);
generator读文件示例
const fs = require('fs').promises;
function* read() {
try {
let name = yield fs.readFile('./assets/name1.txt', 'utf-8');
let age = yield fs.readFile('./assets/age.txt', 'utf-8');
return `${name}---${age}`;
} catch (e) {
console.log(e, 'readFunc');
}
}
let it = read();
it.next().value.then(data => {
console.log(data);
it.next(data).value.then(data => {
console.log(data);
let r = it.next(data);
console.log(r);
})
});
function co(it) {
return new Promise((resolve, reject) => {
function next(data) {
let { done, value } = it.next(data);
if (done) {
resolve(value);
} else {
Promise.resolve(value).then(
(data) => {
next(data);
}, (err) => {
it.throw(err);
reject(err);
});
}
}
next();
})
}
co(read()).then(data => console.log(data), err => console.log(err, 'thenFunc'));
async+await 读文件示例
async function read() {
try {
let name = await fs.readFile('./assets/name.txt', 'utf-8');
console.log("准备读age.txt");
let age = await fs.readFile('./assets/age.txt', 'utf-8');
return `${name}---${age}`
} catch (e) {
throw e;
}
}
read().then(data => console.log(data, 'succ-then'), err => console.log(err, 'thenErrFunc'));