async function getSampleRowHandler() {
  const url = ui.getQueryElement().value;
  ui.updateStatus(`Attempting to connect to CSV resource at ${url}`);
  const myData = tf.data.csv(url);
  ui.updateStatus('Got the data connection ... getting requested sample');
  const sampleIndex = ui.getSampleIndex();
  if (sampleIndex < 0 || isNaN(sampleIndex)) {
    const msg = `Can not get samples with negative or NaN index.  (Requested ${
        sampleIndex}).`;
    ui.updateStatus(msg);
    ui.updateSampleRowMessage(msg);
    ui.updateSampleRowOutput([]);
    return;
  }
  let sample;
  try {
    sample = await myData.skip(sampleIndex).take(1).toArray();
  } catch (e) {
    let errorMsg = `Caught an error retrieving sample from ${url}.  `;
    errorMsg +=
        'This URL might not be valid or might not support CORS requests.';
    errorMsg += '  Check the developer console for CORS errors.';
    errorMsg += e;
    ui.updateSampleRowMessage(errorMsg);
    return;
  }
  if (sample.length === 0) {
    // When samples are requested beyond the end of the CSV, the data will
    // return empty.
    const msg = `Can not get sample index ${
        sampleIndex}.  This may be beyond the end of the dataset.`;
    ui.updateStatus(msg);
    ui.updateSampleRowMessage(msg);
    ui.updateSampleRowOutput([]);
    return;
  }
  ui.updateStatus(`Done getting sample ${sampleIndex}.`);
  ui.updateSampleRowMessage(`Done getting sample ${sampleIndex}.`);
  ui.updateSampleRowOutput(sample[0]);
}
Accesses the CSV to collect a single specified row.  The row index
is specified by the UI element managed in the ui library.