Promise.all(iterable)
方法返回一个 Promise
实例,此实例在 iterable
参数内所有的 promise
都“完成(resolved)”或参数中不包含 promise
时回调完成(resolve);
如果参数中 promise
有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise
的结果。
即每一个iterable都是一个函数表现方式
getuseracl(resultes,objectId) {
var Roles = Parse.Object.extend("_Role");
var roles = new Parse.Query(Roles);
roles.get(objectId).then(res => {
var relation = res.relation("menus");
resultes.set("objectId", this.objectId);
relation.add(resultes);
res.save().then(result => {});
});
}, Promise.all([
this.MenuForm.roles.map(items => this.getuseracl(resultes,items))
]).then(data => {
this.$message({
message: "修改成功",
type: "success"
});
这种写法也会执行,但是是会全部执行,中间如果有错误也会返回全部成功。
个人理解:因为this.getuseracl()是一个函数,而Promise.all的参数为多个函数,所以会一并执行
正确的写法应该是
var arr=[]
this.MenuForm.roles.map(items=>{
arr.push(
new Promise((resolve,reject)=>{
var Roles = Parse.Object.extend("_Role");
var roles = new Parse.Query(Roles);
roles.get(items.id).then(res => {
var relation = res.relation("menus");
resultes.set("objectId", this.objectId);
relation.add(resultes);
res.save().then(result => {
resolve(result)
},error=>{
reject(error)
});
}); })
)
})
Promise.all(arr).then(data=>{
//成功
}).catch(error=>{
失败
})