异步等待Axios无响应

时间:2020-08-20 10:29:27

标签: javascript typescript axios

我有一个简单的方法,可以对API进行Axios调用。调用该方法不会返回任何内容,没有日志,没有错误消息。

async disable(product: Product): Promise<void> {

    try {
        const response = await this.axios.put(`products/update`, {
                data
            }).then(value => {
            return value.data;
        }).catch(error => {
            console.log(`error: ${JSON.stringify(error)}`);
        });

        return response;
    } catch (e) {
        console.log(e);
    }
}


await disable(product)

1 个答案:

答案 0 :(得分:0)

您的代码有些错误:

  • 您的返回类型不应为空,因为您正在返回某种数据
  • 并非所有代码路径都返回结果
  • 如果您没有遇到任何错误,致电await disable(product)不会打印任何内容
  • 应该在正确的级别上记录日志
  • 如果可能,应避免混合Promise和async / await语法
  • 我也不知道您的示例中data的来源。我认为它是某个东西的占位符,但是如果不是,并且您想发送产品,则应该在其中写上它。

我建议您这样重写它:

async disable(product: Product): Promise<any> { // or the type that you expect
    try {
        const response = await this.axios.put(`products/update`, {data}); // Dont mix Promise and async/await syntax, if avoidable

        return response.data; // return the response data directly
    } catch (e) {
        console.error(`error: ${JSON.stringify(error)}`);
        throw e; // rethrow error or return null, if the request failed
    }
}


const result = await disable(product);
console.log(result); // Print the result, to see what you are getting

此外,下次还有一些技巧可以解决此类问题:

  • 如果它在浏览器中,请检查“网络”标签以查看请求是否正在发送以及响应是什么
  • 尝试尽可能多地记录日志或使用调试器查看代码的去向