обрабатывать тип ответа async / await - ошибка IDE - PullRequest
0 голосов
/ 29 января 2020

Я был озадачен сценарием, в котором я использую обещание (затем | ловить) для обработки ошибок, но также жду чистоты кода. Вот то, на что я смотрю:

let rules:Rules = await elb.describeRules(params).promise().then(_handleSuccess).catch(_handleError);

Обработчик ошибок:

function _handleError(e:AWSError) {
    console.error(`Error getting rules info - [${e.code}] ${e.message}`);
    throw(e)
}

Обработчик успеха:

function _handleSuccess(res:DescribeRulesOutput) {
    console.log(`Get rules info: ${JSON.stringify(res.Rules,null,4)}`);
    return res.Rules ;
}

с момента моей ошибки Хендлер всегда будет отбрасывать, я никогда не получу ответ. Моя IDE (VSCode) говорит мне следующее:

Type 'void | Rules' is not assignable to type 'Rules'.
  Type 'void' is not assignable to type 'Rules'.ts

Теперь, если я сделаю let rules:Rules|void, тогда я в порядке, но разве это хорошая практика?

1 Ответ

0 голосов
/ 29 января 2020

Существует разница между использованием async / await и обещаний, и они взаимоисключающие. В вашем примере вы могли бы сделать следующее (если вы хотите использовать async / await):

try {
  let res:DescribeRulesOutput = await elb.describeRules(params).promise();
  console.log(`Get rules info: ${JSON.stringify(res.Rules,null,4)}`);
  return res.Rules;
} catch (e:AWSError) {
  console.error(`Error getting rules info - [${e.code}] ${e.message}`);
  throw(e)
}
elb.describeRules(params).promise().then(_handleSuccess).catch(_handleError);

Сообщение об ошибке говорит вам, что вы назначаете void правилам. Это потому, что void - результат последнего вызова в вашей цепочке обещаний. Надеюсь, что это поможет.

Хорошее чтение об асинхронных / ожидающих и обещаниях можно найти здесь .

...