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 })
 

猜你喜欢

转载自www.cnblogs.com/xubaoer/p/11585297.html