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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM