この例はNode.jsで実行してください。
'use strict';
const fs = require('fs');
// #@@range_begin(list1)
function grun(g) {
const it = g();
(function iterate(val) {
const x = it.next(val);
if(!x.done) {
if(x.value instanceof Promise) {
x.value.then(iterate).catch(err => it.throw(err));
} else {
setTimeout(iterate, 0, x.value);
}
}
})();
}
// #@@range_end(list1)
// #@@range_begin(list2)
function readFile(fileName) {
return new Promise(
(onFulfilled, onRejected) => {
fs.readFile(fileName, "utf-8",
(err, data) => err ? onRejected(err) : onFulfilled(data));
})
}
function writeFile(fileName, data) {
return new Promise(
(onFulfilled, onRejected) => {
fs.writeFile(fileName, data, err => err ? onRejected(err) : onFulfilled("OK"));
});
}
function* fileReadAndWrite() {
const dataA = yield readFile('a.txt');
const dataB = yield readFile('b.txt');
const dataC = yield readFile('c.txt');
yield writeFile('d.txt', dataA+dataB+dataC);
}
// #@@range_end(list2)
// #@@range_begin(list3)
grun(fileReadAndWrite);
// #@@range_end(list3)