节点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专家的标准练习。
回答:
异步/等待只是使异步代码看起来像同步代码,你的代码仍然执行异步。 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 });
}
以上是 节点js:我得到一个(子)ecec的输出并设置一个变量被重新调用? 的全部内容, 来源链接: utcz.com/qa/258701.html