2017-04-26 1 views
2

배경 : V8은 (내가 아는, 오래된 뉴스) 수율을 지원하고, 그 Node.js를에 사용되는 어떤 자바 스크립트 코드 등의 콜백과 멀리해야 할 중대하다node.js : C++ 모듈 내에서 양보하는 방법은 무엇입니까?

질문을 (https://wingolog.org/archives/2013/05/08/generators-in-v8 참조) : 자바 스크립트 공동 루틴이 (모듈을 통해) C++ 코드를 호출 할 수 있기 때문에, 어떻게 호출 된 C++이 yield 연산을 수행 할 수 있습니까? 설명하기 :

// javascript 
function* values() 
{ 
    yield 27; 
    mycppmodule.someFunction(); 
} 

// c++ 
mycppmodule::someFunction() 
{ 
    __somehow_yield(28); // how can we make this happen? 
} 

// user of the code above 
var o = values(); 
o.next(); // returns 27 - came from javascript above 
o.next(); // returns 28 - came from c++ above, which is invoked by js 

을 나는 대답은 V8의 API (https://v8docs.nodesource.com/node-7.4/) 어딘가 의심,하지만 내 검색 (말장난) 어떤 결과를 산출하지 않았다 ...

+0

이유)'수율 mycppmodule.someFunction을 (할'와 레이어를 문제를 이동하지 :

는 문서를 참조하십시오 ? – Alnitak

답변

2

귀하의 mycppmodule.someFunction();를 얻을 수없는 값은 생성자 함수 values()이 JavaScript로 작성된 경우에도 반환됩니다. JavaScript에서 다른 코드처럼 작동하는 C++로 뭔가를하고 싶다면 JavaScript에서 먼저 작동하는지 확인해야합니다. 당신이 (co 모듈 또는 파랑새의 coroutine와 같은) 발전기 기반 코 루틴을 사용하려면

다음 상황은 조금 다르다 - 어떤 코 루틴은 약속을 반환하고 당신이 발전기에서 산출하는 것은 실제로 약속 당신 발전기의 다음 실행에서 해결되고 주입되기를 원하지만 여기서는 그렇지 않습니다.

말했다 된 것을 먼저 생각 JsvaScript에서 구현 될 수 있는지 확인하고 난 주장이 그 :

function* values() { 
    yield 27; 
    someFunction(); 
} 

let someFunction = // fill the blanks 

var o = values(); 
o.next(); // returns 27 - came from generator 
o.next(); // returns 28 - came from someFunction() 

처럼 뭔가에 values() 발전기 기능을 변경하지 않고 구현 될 수 없습니다

function* values() { 
    yield 27; 
    let gen = someFunction(); 
    yield gen.next(); 
} 

나 : 당신이 C와 OK 경우

function* values() { 
    yield 27; 
    yield* someFunction(); 
} 

원래 values() 함수를 걸어 둔 다음 읽습니다.

이제 생성기 함수는 생성자 인 개체를 반환합니다. 생성기는 .next(), .throw().return()과 같은 메서드를 사용합니다. 올바른 인터페이스를 가진 C++로 객체를 만들면 yield*과 같은 키워드로 JavaScript에서 생성기로 사용할 수 있지만이를 테스트해야합니다.

+0

올바른 방향으로 나를 가리켜 주셔서 감사합니다! 귀하의 답변에있는 데이터를 통해 나는 올바른 질문을 할 수있었습니다 - 이것은 제가 처음에 원했던 것입니다 : http://stackoverflow.com/questions/36556778/javascript-generator-function-written-in-c –