问大佬们一个小程序上的一个问题

发布于 2022-09-11 23:16:00 字数 1165 浏览 13 评论 0

imgupload: function (imgdata, id, token) {
        return new Promise((resolve,reject)=>{
            if (imgdata.length == 0) {
                //无图片上传

            } else {
                let uploads = []
                imgdata.forEach((v, i) => {
                    uploads[i] = new Promise((resolve) => {
                        wx.uploadFile({
                            url: ''
                            filePath: v,
                            name: 'img',
                            formData: {
                                id: id,
                                token: token
                            },
                            success: (res) => {
                                if (res.code == 200) {
                                    resolve('ok')
                                }
                            }
                        })
                    })
                })
                
                Promise.all(uploads).then(r=>{
                    resolve('all ok')
                })

            }
        })
    }

这种哪里出问题了呀,uploadFile在forEach里面执行了,都不能用promise all 了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫卆 2022-09-18 23:16:00

你对 Promise 的理解有问题,Promise 会在定义后就在 Event Loop 里触发,并不会等你 .then 了才开始执行。

我猜你是想写一个异步方法,等所有图片都上传结束后才返回。

参考:

imgupload: function (imgdata, id, token) {
    if (imgdata.length === 0) {
        return Promise.resolve('no images');
    } else {
        const uploads = imgdata.map(v => {
            return new Promise((resolve, reject) => {
                wx.uploadFile({
                    url: ''
                    filePath: v,
                    name: 'img',
                    formData: {
                        id: id,
                        token: token
                    },
                    success: (res) => {
                        if (res.code == 200) {
                            resolve('ok')
                        } else {
                            reject(res);
                        }
                    },
                    fail: (err) => reject(err)
                })
            });
        });
        
        return Promise.all(uploads).then(r => {
            return Promise.resolve('all ok');
        });
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文