Reboot - Generator


最近、著者は優雅な技術3期教育を受けている.以前使っていたJavascript specを見直し、学んだ点をシリーズ記事に上げます.コメントに間違いや好奇心があればいつでもコメントで教えてください!

Generator

Promise();

function* foo() {

}

async function bar() {

}
const x = 10;
const y = x * 10;
この2行は同時に運行できますか?
いけません.
const x = () => 10
const y = x() * 10
ちえん
x値が得られた位置は最終的に...
const p = new Promise(function (resolve, reject) {
	setTimeout(() => {
		resolve(1); // then 안에 있는 함수를 호출시킴 "지연"
	}, 1000);
});

p.then(function(r) {
	console.log(r); // 1
});
ジュネーブはコルディンという関数実装体です!
function* make() {
	return 1;
}

const i = make();
関数はパラメータ(入力値)を受け入れ、計算を行い、返します.
車に戻らなければProsizerと言います
プロセスでも関数でも、結果を呼び出して受信するか、次のステップを実行できます(したがって、関数はステータスにできません).
しかし、このような状況の概念を少し緩和すればどうなるのだろうか.
彼に何度もボールを返すことができたらどうですか.何度も呼び出し者に車を返す.
再び関数を呼び出すと、最初からではなく、最後の戻り位置から始まります...!!「コルディン」
リターンには終了関数の反作用があります!別のコマンドを作成しましたyield! また戻ってくるよ.
function* makeNumber() {
	let num = 1;
	while(true) {
		yield num++;
	}
}

const i = makeNumber(); // 실행되는게 아니라 실행될 준비만 되어있음. 실행되는 도구를 전달해줌.

i.next(); // yield된 값이 있는 객체가 리턴됨. { value: 1, done: false }
どのように使いますか.
function* sendData() {
	let num = 1;

	while(true) {
		const x = yield  num++;
		console.log(x);
	}
}

const d = sendData();
d.next();
d.next('x');
const delay = (ms) => new Promise((resolve) => setTimeut(resolve, ms));

function* main() {
	console.log('시작');
	yield delay(3000);
	console.log('3초 뒤');
}
// 동기 코드처럼 보이네...??

const it = main();

const pObject = it.next();

pObject.value.then(() => {
	it.next();
});
function* main() {
	console.log('시작');
	yield delay(3000);
	console.log('3초 뒤');
}
async waitはPromisに対して最適化された
generatorの応用範囲はもっと広い!!
sagaの場合は非同期で屈服するだけでなく、より多くの場合に使用!!