Promise.all结合数组Map用法
Promise.all(iterable)
方法返回一个 Promise
实例,此实例在 iterable
参数内所有的 promise
都“完成(resolved)”或参数中不包含 promise
时回调完成(resolve);
如果参数中 promise
有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise
的结果。
即每一个iterable都是一个函数表现方式
1 getuseracl(resultes,objectId) { 2 var Roles = Parse.Object.extend("_Role"); 3 var roles = new Parse.Query(Roles); 4 roles.get(objectId).then(res => { 5 var relation = res.relation("menus"); 6 resultes.set("objectId", this.objectId); 7 relation.add(resultes); 8 res.save().then(result => {}); 9 }); 10 }, 11 12 13 Promise.all([ 14 this.MenuForm.roles.map(items => this.getuseracl(resultes,items)) 15 ]).then(data => { 16 this.$message({ 17 message: "修改成功", 18 type: "success" 19 }); 20 这种写法也会执行,但是是会全部执行,中间如果有错误也会返回全部成功。 21 个人理解:因为this.getuseracl()是一个函数,而Promise.all的参数为多个函数,所以会一并执行 22 正确的写法应该是 23 var arr=[] 24 this.MenuForm.roles.map(items=>{ 25 arr.push( 26 new Promise((resolve,reject)=>{ 27 var Roles = Parse.Object.extend("_Role"); 28 var roles = new Parse.Query(Roles); 29 roles.get(items.id).then(res => { 30 var relation = res.relation("menus"); 31 resultes.set("objectId", this.objectId); 32 relation.add(resultes); 33 res.save().then(result => { 34 resolve(result) 35 },error=>{ 36 reject(error) 37 }); 38 }); 39 40 }) 41 ) 42 }) 43 Promise.all(arr).then(data=>{ 44 //成功 45 }).catch(error=>{ 46 失败 47 })