2017-12-02 2 views
0

Ich habe nach einem echten Beispiel gesucht, aber ich konnte keines finden. Ich bin völlig neu zu Knoten js.Knoten js: I, um die Ausgabe eines (untergeordneten) ecec zu erhalten und eine Variable für die Neuabstimmung festzulegen?

Ich richte einen Dienst ein, der Kennwörter mithilfe eines Befehlszeilentools abruft.

Die Befehlszeile "pw get key" gibt das mit dem Schlüssel verknüpfte Kennwort zurück. Die Befehlszeile "pw set key password" legt das Passwort für den Schlüssel fest.

Der Teil Code, den ich bis jetzt habe, ist:

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; 

Dies wird in einer testcafe Umgebung verwendet werden. Hier definiere ich eine Rolle.

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 }); 
} 

Der Testcafe-Code funktioniert, wenn ich Literal-Strings für Pw verwenden.

Die/fehlenden Bits/ist leer gelassen, wie ich viele verschiedene Dinge ausprobiert, aber niemand hat funktioniert!

Ich denke, ich kann es mit der * Sync-Version des Kindes arbeiten lassen. Aber da dies in einem Testcafe ist, das möglicherweise parallel läuft, würde ich eine asynchrone Version bevorzugen.

Irgendwelche Vorschläge? Ich weiß, dass es in node.js Versprechungen und dergleichen zu verstehen ist, aber ich konnte mich nicht davon befreien.

Es scheint, dass es eine Standardübung für node.js Experten sein sollte.

+0

Sie eine Menge Code zeigen, aber Sie don Beschreibe in Worten nicht genau, was du zu erreichen versuchst oder wo du existierst Code schlägt fehl. So kann ich nicht wirklich sagen, was Sie möchten, dass wir mit dem Problem helfen oder es gut genug verstehen, um meinen eigenen Code vorzuschlagen, um das zu lösen. – jfriend00

Antwort

1

Async/Warten Sie nur async Code sieht aus wie Sync-Code, Ihr Code noch async ausgeführt. Und das Rückgabeergebnis der Async \ Await-Funktion cmdPwGet ist eine Promise, nicht die password, wie Sie denken.

das ausführen Ergebnis cmdPwGet ist ein Versprechen

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

machen getPw Async/Await

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

das Passwort erhalten

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

Danke! Ich ging davon aus, dass man das Versprechen irgendwann lösen würde! :(mein Fehler. – mariotti

Verwandte Themen