继续循环函数,直到内部的回调解析为 true



>我有两个相互关联的函数。

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

不过,最好对此进行一些限制,这样它就不能无限循环。

最新更新