1***@qq.com
1***@qq.com
  • 发布:2022-05-04 00:31
  • 更新:2022-10-28 23:16
  • 阅读:1418

uni.uploadFile上传后 success函数不能把返回值保存

分类:uni-app

使用文件上传时想把成功的data返回,但是success打印的有值returnList 是空, 在success直接 return res.data也是空

export function uploadImage(imgList) {  
    let returnList;  
    //上传图片  
    uni.uploadFile({  
        url: BASE_URL + '/**/**',  
        files: 要上传的文件,  
        formData: {  
            'num': imgList.length  
        },  
        header: {  
            "Content-Type": "multipart/form-data"  
        },  
        success: (res) => {  
            returnList = res.data  
            console.log(returnList )  
        },  
        fail: (res) => {  
            msg("图片上传发生错误")  
        }  
    })  
    return list;  
}
2022-05-04 00:31 负责人:无 分享
已邀请:
非专业键盘侠

非专业键盘侠

首先,uni.uploadFile执行的是网络服务,需要时间,你在底部直接return,等于说还没有完成网络请求,你就已经return了,所以肯定拿不到数据。
两种写法,Promise了解一下,async&await也了解一下,两种写法都行,比如用Promise写法:

export function uploadImage(imgList) {    
    return new Promise((resolve,reject) => {  
        let returnList;  
        //上传图片    
        uni.uploadFile({    
            url: BASE_URL + '/**/**',    
            files: 要上传的文件,    
            formData: {    
                'num': imgList.length    
            },    
            header: {    
                "Content-Type": "multipart/form-data"    
            },    
            success: (res) => {    
                // returnList = res.data    
                // console.log(returnList )    
                resolve(res.data)  
            },    
            fail: (res) => {    
                // msg("图片上传发生错误")    
                reject  
            }    
        })    
        // return list   
    })  
}

调用的时候,如下:

uploadImage(files)  
    .then(res => {  
        console.log(res) // 这就是你要的数据  
    })  
    .catch(e => console.log(e))  
    .finally(() => {})
  • 1***@qq.com (作者)

    可是大佬即使这么调用也拿不到返回值,需要把这个返回值拿出来用


    let postImgList;

    this.$utils.uploadImage(this.imgList)

    .then(res => {

    postImgList = res

    console.log(res)

    })

    .catch(e => console.log(e))

    .finally(() => {})

    console.log(postImgList)


    postimglist依旧是underfind

    2022-05-04 01:45

1***@qq.com

1***@qq.com (作者)

这么写也是underfind

  • 非专业键盘侠

    下面打印的时候,上面还没有执行完毕,所以拿不到你想要的值。你要把下面的操作放到then里面去执行

    肯定的呀。我觉得你还是去看下Promise吧。顺带把同步和异步的概念搞搞清楚,你就知道问题所在了。

    Promise的前身就是回调函数,如果这种写法你暂时接受不了,可以用常规的回调函数来写

    2022-05-04 02:09

  • 呆狗的一生

    回复 非专业键盘侠: 哎,你给他白说了。口角唾沫都一大堆了,他都听不明白,哈哈。

    2022-05-04 04:06

  • y***@163.com

    回复 呆狗的一生他问的错你们没搞懂吧? 只是写法也有错而已。他问的问题是因为 返回类型为String 没有转json对象所以直接取值为undefined

    2024-04-25 15:17

呆狗的一生

呆狗的一生 - 呆狗的一生

教你个写法。uploadImage方法是 @非专业键盘侠 给出的方法哦 ,在方法前加个 await

async function 方法 ( ) {  
    let postImgList =  await uploadImage( this.imgList )    
    console.log( postImgList )  
}
8***@qq.com

8***@qq.com

export function uploadImage(imgList) {
return new Promise((resolve,reject) => {
let returnList;
//上传图片
uni.uploadFile({
url: BASE_URL + '//',
files: 要上传的文件,
formData: {
'num': imgList.length
},
header: {
"Content-Type": "multipart/form-data"
},
complete: (res) => {
returnList = res.data
}
})

})    

}

这样是有效的 亲测过了

要回复问题请先登录注册