찾다

 >  Q&A  >  본문

node.js - nodejs의 공동 모듈이 자체적으로 실행됩니다.

내 코드는 이렇습니다

으아악

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

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

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

두 번째 작성 방법:

으아악

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

伊谢尔伦伊谢尔伦2757일 전694

모든 응답(4)나는 대답할 것이다

  • 漂亮男人

    漂亮男人2017-05-16 13:37:43

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

    회신하다
    0
  • 某草草

    某草草2017-05-16 13:37:43

    으아악

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:37:43

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

    회신하다
    0
  • PHPz

    PHPz2017-05-16 13:37:43

    co 라이브러리의 소스 코드를 살펴보세요. co 라이브러리에서 오류가 보고되는 이유는 위에서 언급한 대로 undefine<이기 때문입니다. /code>가 반환됩니다. 구체적인 오류 코드는 다음과 같습니다. 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<로 변환하려고 시도합니다. / code>, 자세한 내용은 toPromise 함수를 참조하세요. 🎜 으아아아 🎜입력이 정의되지 않음이므로 결국 toPromise정의되지 않음을 반환하고 감지는 Promise가 아니므로 오류가 발생합니다. 🎜 🎜1,2,3이 출력되지 않는 이유는 yield 뒤에 있는 관계 때문입니다. yield는 함수를 매개변수로 받아들여야 합니다. 그리고 이 함수는 실행되어야 하므로 yield 뒤에는 일반적으로 비동기 작업이 옵니다. 이 함수는 콜백 함수이므로 다음과 같이 변경하면 됩니다. 🎜 으아아아

    회신하다
    0
  • 취소회신하다