2016-06-05 5 views
0
const f = n => new Promise((resolve, reject) => { 
    setTimeout(()=>{ 
     if (n > 2){ 
      resolve({result: `${n} is higher than 2`}); 
     } else { 
      resolve({error: `${n} is lower than 2`}); 
     } 
    }, 1000); 
}); 
function *m(){ 
    const {result, error} = yield f(parseInt(process.argv[2])); 
    if(error){ 
     console.log(error); 
    } else { 
     console.log(result); 
    } 
} 
m(); 

node.js v6.2를 사용 중이며 node file.js 344을 실행할 때 결과가 없습니다. 내가 선택한 기능에 디버거를 넣으면 디버그 모드에서 멈추지 않습니다.왜이 자바 스크립트 함수 생성기가 작동하지 않습니까?

반복자를 추출한 경우에만 const it = m();으로 끝납니다. 위의 패턴이 올바른 것으로 보이는 예제를 보았습니다. 내가 뭘 놓치고 있니? 감사합니다.

+0

스마트 인용 부호가 사용됩니까? –

+0

당신은 약속을 하겠지만 약속은 지키지 않습니다. 이것을 달성하기 위해 코 루틴 환경이 필요하지 않습니까? –

+0

나는 약속이 함수에서 반환되어야한다고 생각하고 단어 "반환"을 사용하는 동안에 만. 'n() return New Promise ((resolve, reject)'와 같은 것을 시도하십시오.) – Roysh

답변

2

m()으로 전화를 걸면 발전기는 초기화되지만 아무 것도하지 않습니다. 수익률이 발생하려면 m()의 결과에 next()으로 전화해야합니다.

let generator = m() 
generator.next().value.then(result => console.log(result)) 

// will log { result: '344 is higher than 2' } to the console 

당신이 발전기의 next 실행이 다시 시작되고 그것이 yield가 발생하면이 중단됩니다 전화

. 이 경우 yield는 next의 결과 인 value 속성에서 사용할 수있는 약속을 반환합니다.

https://davidwalsh.name/async-generators은 좋은 주제입니다.

+0

고맙습니다. 대답과 링크가 매우 도움이되었습니다. – jgldev

관련 문제