【问题标题】:handle response type async/await - IDE error处理响应类型 async/await - IDE 错误
【发布时间】:2020-05-15 06:52:05
【问题描述】:

我被这样的场景难住了:我利用 promise(then|catch) 来处理错误,但还要等待代码清洁。以下是我正在查看的内容:

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,那么我可以,但这是一种好的做法吗?

【问题讨论】:

    标签: typescript aws-sdk-js


    【解决方案1】:

    使用 async/await 和 Promise 是有区别的,它们是互斥的。在您的示例中,您可以执行以下操作(如果您想使用 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 是你的承诺链中最后一次调用的结果。希望对您有所帮助。

    可以在 here 找到有关 async/await 与 promise 的好读物。

    【讨论】:

    • 是的....只是想避免包装在 try-catch 块中。但我想这不是太糟糕了
    • 另一种选择是继续使用 Promise。你能做的不多。希望能回答你的问题。
    猜你喜欢
    • 2016-08-04
    • 2018-09-03
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2020-09-10
    • 2021-10-30
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多