>我有两个相互关联的函数。
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();
}
如果我输入正确的地址,函数会按预期运行,错误的地址会破坏它,但我希望它继续循环,直到地址正确。我需要更改什么才能存档正确的行为?
您的"主要"newRunner
(在您的问题的顶部(仅在auth.newRunner
满足时满足,否则拒绝。 auth.newRunner
只有在成功获取数据时才满足。因此,要循环直到成功获得数据,您需要将调用包装在 try
/catch
中:
let failed;
do {
try {
await newRunner();
failed = false;
} catch {
failed = true;
}
} while (failed);
不过,最好对此进行一些限制,这样它就不能无限循环。