关于react 异步同步的问题

transcodeFunc = async (data, type, id) => {

    let { timer } = this.state
    clearTimeout(timer)
    let state;
    let res = await getFilsStatus(data.path);
    if (res.success) {
        if (res.body.progress == -1) {
            state = -1; //转码失败
            Toast.info('视频转码失败,请重新上传!', 1);
            let uploadQueue = this.state.uploadQueue.filter(v => v.id != id);
            // uploadQueue = uploadQueue.map(d=>{
            //     if(d.id === id){
            //         if (d.id === id) {
            //             d.state = -1
            //             d.transcodePercent = res.progress;
            //             return d;
            //         } else {
            //             return d;
            //         }
            //     }
            // })
            this.setState({
                uploadQueue: uploadQueue
            });

        } else if (res.body.progress !== 100) {
            state = 4;
             timer = setTimeout(async () => {
                this.transcodeFunc(data, type, id).then(res => {

console.log(res.state) //打印是 4, 4 ,5 5代表最后成功

                            let newUploadQueue = this.state.uploadQueue.map(d => {
                                if (d.id === id) {
                                    d.state = res.state
                                    d.transcodePercent = res.progress;
                                    return d;
                                } else {
                                    return d;
                                }
                            });
                            this.setState({
                                uploadQueue: newUploadQueue  //但是这里 state一直是5 按道理 应该也是 4, 4 5
                            });
                         
                })
            }, 500)
        }
        else {
           state = 5;
            if (type === 'audio') {
                let text = res.body.filename;
                let url = res.body.httpTrancodePath;
                this.handleInsertAudio(text, url, id);
            } else if (type === 'video') {
                let text = res.body.filename;
                let url = res.body.httpTrancodePath;
                let thumb = res.body.thumb;
                this.handleInsertVideo(text, url, id, thumb);
            }
        }
    
    }
    return { state, progress: res.body.progress }
}

this.setState的时候 为什么 里面的state一直是5 而不是4,4,5

阅读 579
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题