多个Promise循环和 循环里面异步问题示例

javascript 复制代码
export function obsPost(data = []) {
	return new Promise(function(resolve, reject) {
		if (!data || data.tempFilePaths.length <= 0) {
			return reject('上传正确数据!')
		}
		let linshi_arr = [],
			true_arr = [],
			fileName = '',
			suffix = '',
			path = '',
			tempName = '';

		for (let i in data.tempFiles) {
			fileName = data.tempFiles[i].name //文件名字
			suffix = fileName.substring(fileName.lastIndexOf(".") + 1)
			tempName = data.tempFilePaths[i]
			tempName = tempName.substring(tempName.lastIndexOf("/") + 1)
			path = suffix + '/' + tempName + '-' + (Date.parse(new Date()) / 1000) + '.' + suffix
			linshi_arr.push(new Promise(function(resolve1, reject1) {
				(function(path1,resolve1, reject1){
					uni.common.post(
						uni.common.apiServer + 'yin', {
							type: 'get_obs_key', //获取有多少题
							path:path1
						},
						true,
						(res) => {
							if (res.code == 200) {
								uni.uploadFile({
										url: res.data.url, //用你自己的 bucket 名替换星号
										filePath: data.tempFilePaths[i],
										name: 'file',
										formData: {
											'key': path1,
											'AccessKeyId': res.data.Accesskeyid,
											'Policy': res.data.Policy,
											'x-obs-acl': 'public-read',
											'content-type': '',
											'Signature': res.data.Signature
										},
										success() {
											true_arr.push(path1)
											resolve1()
										},fail() {
											reject1();
										}
									}
								)
							} else {
								reject1('上传失败');
							}
						},
						(e) => {
							console.log(e);
						}
					);
				})(path,resolve1, reject1)
			}))
		}
		Promise.all(linshi_arr).then((res) => {
			resolve( true_arr)
		}).catch((err) => {
			console.log(err);
			reject('上传失败');
		})
	});
}
相关推荐
东宇科技3 分钟前
如何使用js进行抠图。识别商品主体
开发语言·javascript·ecmascript
不会写DN5 分钟前
Vue3中的computed 与 watch 的区别
javascript·面试·vue
Dxy12393102165 分钟前
Python使用PyEnchant详解:打造高效拼写检查工具
开发语言·python
qq_381338506 分钟前
TypeScript 类型安全与类型体操实战:从入门到精通
javascript·安全·typescript
网域小星球9 分钟前
C 语言从 0 入门(十五)|综合小项目:菜单交互与简易功能实现
c语言·开发语言·交互
朦胧之18 分钟前
AI 编程工具使用浅谈
前端·后端
网域小星球19 分钟前
C 语言从 0 入门(十六)|动态内存管理:malloc /free/calloc /realloc 精讲
c语言·开发语言·free·malloc·动态内存
柳杉22 分钟前
HTML-in-Canvas:让 Canvas 完美渲染 HTML 的 Web 新标准
前端·javascript
雪的季节26 分钟前
qt信号槽跨线程使用时候的坑
java·开发语言·qt
cTz6FE7gA29 分钟前
WebGL实战:用Three.js创建3D场景,实现沉浸式Web体验
前端·javascript·webgl