我有两个相互关联的功能。
module.exports = async function newRunner() {
console.log('No Config found. Requesting new Runner ID');
if (!process.env.ADDRESS) {
const a = await inquirer.prompt([
{
type: 'input',
message: 'Enter the runner api address',
name: 'address',
},
]);
config.ADDRESS = a.address;
} else {
config.ADDRESS = process.env.ADDRESS;
}
config.save();
const res = await auth.checkAddress();
console.log('New Runner ID', res.id);
config.ID = res.id;
config.TOKEN = res.token;
config.save();
};
第const res = await auth.newRunner();
行调用以下函数。
exports.checkAddress = args => new Promise((resolve, reject) => {
const cArgs = {
data: args,
path: {},
parameters: {},
headers: {
'Content-Type': 'application/json',
},
};
client.post(`${config.ADDRESS}/new-runner`, cArgs, (data, response) => {
if (response.statusCode !== 200) return reject(new Error(`Status code ${response.statusCode}`));
return resolve(data);
})
.on('responseTimeout', (res) => {
console.log('Update Response Timeout!', res);
reject(new Error('response has expired'));
})
.on('error', (err) => {
reject(err);
});
});
我需要保持第一个功能运行,直到输入的地址正确并且第二个功能解析为true。我尝试了以下方法。
await newRunner();
while (!await auth.newRunner()) {
await newRunner();
}
如果我输入正确的地址,该函数将按预期运行,错误的地址会破坏它,但是我希望它继续循环直到地址正确。要更改正确的行为,我需要更改什么?
答案 0 :(得分:0)
您的“主要” newRunner
(在您的问题顶部)仅在auth.newRunner
满足时满足,否则就拒绝。 auth.newRunner
仅在成功获取数据时满足。因此,要循环执行直到成功获取数据,您需要将调用包装在try
/ catch
中:
let failed;
do {
try {
await newRunner();
failed = false;
} catch {
failed = true;
}
} while (failed);
不过,最好对此设置一些限制,以免无限循环。