节点js:我得到一个(子)ecec的输出并设置一个变量被重新调用?

问题描述:

我一直在寻找一个真正的例子,但我找不到任何。我完全陌生的节点js。节点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版本一起工作。但是,因为这是可以并行运行的testcafe,所以我更喜欢异步版本。

有什么建议吗?我知道这是真的了解node.js中的承诺等,但我无法解决这个问题。

它似乎应该是node.js专家的标准练习。

+0

你表现出很多的代码,但你不真的不能真正用文字来描述你想要完成什么或者你现有的东西在哪里代码失败了。因此,我无法确切地告诉您希望我们提供哪些帮助或了解问题,并提出自己的代码来解决问题。 – jfriend00

异步/等待只是使异步代码看起来像同步代码,你的代码仍然执行异步。 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