generator yield next
function* outer() {
console.log('outer: pre yield');
// 1. yield* inner();
// 2. yield* inner;
// 3. yield inner();
// 4. yield inner;
console.log('outer: after yield');
}
function* inner() {
console.log('inner');
}
function* f1() {
console.log('f1: pre next');
yield* f2();
console.log('f1: post next');
}
function* f2() {
console.log(' f2: pre next');
yield* f3();
console.log(' f2: post next');
}
function* f3() {
console.log(' f3: pre next');
console.log(' f3: post next');
}
var g = f1();
g.next();
출력:
f1: pre next f2: pre next f3: pre next f3: post next f2: post next f1: post next
co.wrap(compose(this.middleware))
module.exports = compose;
function compose(middleware) {
return function*(next) {
var i = middleware.length;
var prev = next || noop();
var curr;
while (i--) {
curr = middleware[i];
prev = curr.call(this, prev);
}
yield* prev;
}
}
function* noop() {}
원본 코드는 비교적 간단하지만 사실은compose([f1, f2,..., fn])가 fn(...f2(f1(noop())으로 바뀌고 최종 반환값은generator function이다.또한 koa의yieldnext에서next는generator임을 알 수 있다.
다음은 compose로 위의 예를 개작합니다.
function* f1(next) {
console.log('f1: pre next');
yield next;
console.log('f1: post next');
}
function* f2(next) {
console.log(' f2: pre next');
yield next;
console.log(' f2: post next');
}
function* f3(next) {
console.log(' f3: pre next');
yield next;
console.log(' f3: post next');
}
var compose = require('koa-compose');
var g = compose([f1, f2, f3])();
g.next();
g.next();
출력:
f1: pre next f1: post next
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.