node.js - nodejs의 공동 모듈이 자체적으로 실행됩니다.
伊谢尔伦
伊谢尔伦 2017-05-16 13:35:43
0
4
712

내 코드는 이렇습니다

으아악

내 예상 실행 결과, 콘솔은 1, 2, 3을 인쇄해야 합니다

그런데 프로그램 실행 시 오류가 발생했습니다

내꺼라고 해야되나yield后面应该跟function但是上面的demo中我的yield后面跟的已经是function왜 기대되는 결과물이 없나요?

두 번째 작성 방법:

으아악

co이미 생성기 기능을 허용합니다. 위의 작성 방법은 콘솔에 1,2,3을 출력할 수 없습니다

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(4)
漂亮男人

Yoursyield后面跟的不是are这个函数,而是are执行后的返回值。
其实它等于yield undefined, 이것이 오류의 원인입니다.

某草草

으아악

伊谢尔伦

일반 기능은 지원되지 않습니다

PHPzhong

co 라이브러리의 소스 코드를 살펴보세요. co 라이브러리에서 오류가 보고되는 이유는 위에서 언급한 대로 undefine가 반환됩니다. 구체적인 오류 코드는 다음과 같습니다. co库的源码就好,报错是co库报出来的,原因是因为楼上说的返回了undefined,具体报错代码如下:

if (value && isPromise(value)) 
    return value.then(onFulfilled, onRejected);
return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, '
+ 'but the following object was passed: "' + String(ret.value) + '"'));

isPromise检测是否为Promiseco库先尝试将yield后转换为Promise,具体参见toPromise函数:

function toPromise(obj) {
  if (!obj) return obj;
  if (isPromise(obj)) return obj;
  if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj);
  if ('function' == typeof obj) return thunkToPromise.call(this, obj);
  if (Array.isArray(obj)) return arrayToPromise.call(this, obj);
  if (isObject(obj)) return objectToPromise.call(this, obj);
  return obj;
}

传入的是undefined,所以最终toPromise返回了undefined,检测不是Promise,所以就抛出了错误。

至于为什么没有输出1,2,3的原因,是因为yield后面的关系,yield后面是要接受函数作为参数,并且要执行这个函数的,所以yield 으아아아

isPromisePromise인지 감지합니다. co 라이브러리는 먼저 yieldPromise, 자세한 내용은 toPromise 함수를 참조하세요. 🎜 으아아아 🎜입력이 정의되지 않음이므로 결국 toPromise정의되지 않음을 반환하고 감지는 Promise가 아니므로 오류가 발생합니다. 🎜 🎜1,2,3이 출력되지 않는 이유는 yield 뒤에 있는 관계 때문입니다. yield는 함수를 매개변수로 받아들여야 합니다. 그리고 이 함수는 실행되어야 하므로 yield 뒤에는 일반적으로 비동기 작업이 옵니다. 이 함수는 콜백 함수이므로 다음과 같이 변경하면 됩니다. 🎜 으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿