redux 如何在Axios中获得成功?

brqmpdu1  于 11个月前  发布在  iOS
关注(0)|答案(2)|浏览(128)

我有点困惑,如何上传与axios进度事件.实际上我存储到aws s3的巨大数字文件.为此,如何获得上传进度?我需要这个函数onUploadProgress
目前我的帖子请求是这样的:

export function uploadtoCdnAndSaveToDb(data) {
    return dispatch => {
        dispatch(showUnderLoader(true));
        return axios.post('/posttodb', {data:data},

        ).then((response) => {
            console.log(response.data)
        })
    }
}

字符串

cwxwcias

cwxwcias1#

Axios存储库有一个关于如何做到这一点的明确示例:https://github.com/axios/axios/blob/master/examples/upload/index.html

摘自网站

当你用axios发出请求时,你可以传入请求配置。请求配置的一部分是上传过程中要调用的函数。

const config = {
    onUploadProgress: progressEvent => console.log(progressEvent.loaded)
}

字符串
当你使用axios发出请求时,你可以传入这个配置对象。

axios.put('/upload/server', data, config)


当上传进度发生变化时,将调用此函数。

只是你代码上的一个注解

我还注意到你没有充分利用ES6的潜力!

  • 对象声明 *

它有一些很好的语法,例如,你定义了一个对象:{ data: data },但是{ data }就足够了。
使用符合某些linting规则的linter可能是值得的,最常见的是AirBnB style guide

rt4zxlrg

rt4zxlrg2#

只是想在前面的答案上加上一些有特定配置的人可能会来。
这与“问题”有关,可能会发现ondatadProgress只能被调用一次或两次,通常是用progressEvent.loaded = progressEvent.total调用一次。
因此,如果回调至少被调用一次,axios或measurement没有任何问题,实际上值是正确的。如果您正在进行开发,并且您的后端负责将数据上传到例如aws s3 bucket,则可能会遇到此问题。
在开发中,通常前端和后端都在同一台机器上,发送数据包没有真实的时间问题(即使是大文件,也几乎可以立即将数据发送到开发后端)
技巧和时间不被测量的地方(因为这是后端作业)是数据传输到s3,然后你必须等待promise解决,但你不能跟踪这个过程,除非使用web套接字等。
大多数时候,这不是生产环境中的问题,假设你在aws上,那么大部分时间都花在从用户发送数据到你的后端和后端部分(这是ec2)发送数据到s3有很好的上传速度,它是每10 MB上传约0.3秒(对于法兰克福地区),所以它可能是可以忽略不计的用户->后端数据传输相比。
看到这个链接与一些benchmarks.
无论如何,要测试onWebadProgress是否真的被多次调用,就像你对大文件所期望的那样,只需在开发人员工具的网络选项卡中切换网络连接。
x1c 0d1x的数据

相关问题