2017-12-02 5 views
0

나는 진정한 예를 찾고 있었지만 아무 것도 찾을 수 없었다. 나는 완전히 노드 j에 익숙하지 않다.노드 js : (자식) ecec의 출력을 가져오고 변수를 다시 설정하도록 설정 하시겠습니까?

저는 명령 줄 도구를 사용하여 암호를 얻는 서비스를 설정하고 있습니다.

명령 줄 "pw get key"는 키와 관련된 암호를 반환합니다. 명령 줄 "pw set key password"는 키와 관련된 암호를 설정합니다.

지금까지이 부분 코드는 다음과 같습니다

const util = require('util'); 
const exec = util.promisify(require('child_process').exec); 

async function cmdPwGet(key) { 
    const { stdout, stderr } = await exec(`pw get ${key}`); 
    console.log('stdout:', stdout); 
    console.log('stderr:', stderr); 
} 

async function cmdPwPut(key, passwd) { 
    const { stdout, stderr } = await exec(`pw set ${key} ${passwd}`); 
    console.log('stdout:', stdout); 
    console.log('stderr:', stderr); 
} 

class PwService { 

    constructor (KEY){ 
    this.basekey = KEY; 
    this.pwd = ""; 
    } 

    setPw (key, passwd) { 
     key = this.basekey + "." + key; 
     var res = cmdPwPut(key, passwd); 
     /* missing bits */ 
    } 

    getPw (key) { 
     key = this.basekey + "." + key; 
     var res = cmdPwGet(key); 
     /* missing bit */ 
    } 
} 

module.exports = PwService; 

이는 testcafe 환경 내에서 사용됩니다. 여기서 저는 역할을 정의합니다.

testRole() { 
    let pwService = new PwService('a-key-'); 
    let pw = pwService.getPw('testPW'); 
    //console.log('pw: '+pw) 

    return Role('https://www.example.com/', async t => { 
    await t 
    .typeText(this.firstInput, 'testPW') 
    .typeText(this.secondInput, pw<??>) 
    .click(this.selectButton); 
    }, { preserveUrl: true }); 
} 

pw에 리터럴 문자열을 사용하면 testcafe 코드가 작동합니다.

/누락 비트 /는 여러 가지를 시도했지만 아무도 작동하지 않으므로 비어 있습니다.

나는 아이의 * Sync 버전으로 작업 할 수 있다고 생각합니다. 그러나 이것은 병렬로 실행될 수있는 테스트 카시 안에 있으므로 비동기 버전을 선호합니다.

의견이 있으십니까? node.js의 약속 등을 이해하는 것이 정말로 중요하다는 것을 알고 있지만,이 문제로부터 벗어날 수는 없습니다.

node.js 전문가에게는 표준 연습이 필요합니다.

+0

당신은 코드를 많이 보여 비밀번호를 발급받을합니다,하지만 당신 돈 당신이 성취하고자하는 바를 정확하게 말로 표현하거나 기존 코드가 실패합니다. 그러므로, 나는 당신이 우리가 문제를 해결하기 위해 내 자신의 코드를 제안하기에 충분할 정도로 문제를 돕거나 이해하기를 바라는 것을 정말로 말할 수 없다. – jfriend00

답변

1

비동기/비동기 코드 만 동기화 코드처럼 보이면 코드가 여전히 비동기로 실행됩니다. 그리고 Async \ Await 함수 cmdPwGet의 반환 결과는 Promise이고 생각하면 password이 아닙니다.

cmdPwGet의 실행 결과는 약속

async function cmdPwGet(key) { 
    const { stdout, stderr } = await exec(`pw get ${key}`); 
    return stdout; 
} 

getPw 비동기/기다리고 있습니다

async getPw(key) { 
     key = this.basekey + "." + key; 
     var res = await cmdPwGet(key); 
     return res; 
    } 

testRole() { 
    let pwService = new PwService('a-key-'); 

    return Role('https://www.example.com/', async t => { 
    // get your password with await 
    let pw = await pwService.getPw('testPW'); 
    await t 
    .typeText(this.firstInput, 'testPW') 
    .typeText(this.secondInput, pw<??>) 
    .click(this.selectButton); 
    }, { preserveUrl: true }); 
} 
+0

고마워요! 나는 언젠가 약속을 해결할 것이라고 기대하고 있었다. :(내 잘못이야. – mariotti

관련 문제