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

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 了

阅读 883
1 个回答

你对 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');
        });
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题