Client receives undefined from validatedmethod with async function

Hi,

I am trying to send a base64 string (zip file) to the client when calling 'handleExportModel’
The server correctly generates the base64 string, but the client sees undefined. This is probably because the client does not correctly wait for the response from the server (even though the client has a callback function).
Any advice where I could be going wrong?

//---------Client function------
const handleExportModel = (model) => {
  exportModel.call({ modelId: model._id }, (err, response) => {
    if (err) Bert.alert(err.reason, 'danger');
    else {
      console.log('response====',response);
      const blob = convertBase64ToBlob(response);
      saveAs(blob, `${model.modelName}.zip`);
    }
  });
};
//---------Shared function---------
export const exportModel = new ValidatedMethod({
  name: 'exportModel',
  validate: new SimpleSchema({
    modelId: { type: Mongo.ObjectID },
  }).validator(),
  run({ modelId }) {
    if (Meteor.isServer) {
      import { ismanager } from '../server/user';
      import { exportModelData } from '../../io/server/exportdata';
      if (ismanager(modelId)) {
        return exportModelData(modelId);
      } else throw new Meteor.Error('permission denied', 'User not a model member');
    }
  },
});
// ---------Server function---------
const ogr2ogr = require('ogr2ogr');

export function exportModelData(modelId) {
  const collection = Nodes;
  const query = { modelId };
  const fields = {};
  const data = collection instanceof Mongo.Collection ?
    getDataFromCollection(query, fields, collection) :
    collection;

  const readstream = ogr2ogr(data[0])  // Likely async function
                      .format('shp')
                      .skipfailures()
                      .stream();
  let sdata = [];
  readstream.on('data', (buf) => { sdata.push(buf); });
  readstream.on('end', () => {
    sdata = Buffer.isBuffer(sdata[0]) ? Buffer.concat(sdata) : sdata.join('');
    return sdata.toString('base64');
  });