Получение пустого обещания от обратного вызова - PullRequest
0 голосов
/ 24 апреля 2020

Может кто-нибудь подсказать, почему я получаю пустое обещание в этом случае? Обещание {undefined} Я вижу данные с console.log непосредственно перед возвратом, поэтому они не выдают никаких ошибок.

const getObj = async (bucket, path) => {
  try {
    let timer = us.now();
    time_log('info', util.format('Getting object'));
    minioClient.getObject(bucket, path, function(err, stream) {
      if (err) { _throw({ code: 'internal_error', severity: 1, user_code: 'internal_error', reason: util.format('unhandled_exception occured in getObj function: %s', err)}) };
      let buffer = '';
      stream.on('data', function(chunk) {
        buffer += chunk;
      })
      stream.on('end', function() {
        time_log('mile', util.format('getObj response_took: [%s]', us.parse((us.now() - timer)).toString()));
        return(JSON.parse(buffer));
      })
      stream.on('error', function(err) {
        throw(err);
      })
    })
  }
  catch (e) {
    throw({ code: 'internal_error', severity: 1, user_code: 'internal_error', reason: util.format('unhandled_exception occured in getObj function: %s', e)});
  }
}

console.log(getObj('configs', 'nodes.json'));

1 Ответ

1 голос
/ 24 апреля 2020

async функции должны возвращать обещание. В ваших случаях вы ничего не возвращаете. Вы могли бы сделать что-то вроде этого:

const getObj = async (bucket, path) => {
try {
    let timer = us.now();
    time_log('info', util.format('Getting object'));
    return new Promise((resolve, reject) => {
      minioClient.getObject(bucket, path, function(err, stream) {
          if (err) { reject({ code: 'internal_error', severity: 1, user_code: 'internal_error', reason: util.format('unhandled_exception occured in getObj function: %s', err)}) };
          let buffer = '';
          stream.on('data', function(chunk) {
            buffer += chunk;
          })
          stream.on('end', function() {
            time_log('mile', util.format('getObj response_took: [%s]', us.parse((us.now() - timer)).toString()));
            resolve(JSON.parse(buffer));
          })
          stream.on('error', function(err) {
            reject(err);
          })
      })
    })
  }
  catch (e) {
    throw({ code: 'internal_error', severity: 1, user_code: 'internal_error', reason: util.format('unhandled_exception occured in getObj function: %s', e)});
  }
}

console.log(getObj('configs', 'nodes.json'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...