2017-05-31 57 views
1

我有一個簡單的ES6類的數組。每個類都有一個構造函數和一個接受回調的hello方法。我需要迭代該數組併爲每個類調用hello方法。在我想要發出通用事件之前,每個回調都必須完成。我只是不確定最好的方式來做到這一點。在ES6類的數組中使用回調的調用方法

let todo = this.instance.map((obj, i) => { 
    return obj.module.hello((cb) => { 
     cb(); 
    }); 
}); 

Promise.all([ 
    todo 
]).then(() => { 
    console.log('done?'); 
    //emitter.emit('ready'); 
}); 

我的課程看起來像這樣。

class Hero extends Abstract { 

    constructor (options) { 
    super(options); 
    } 

    hello(cb) { 
     console.log('Hello || HeroClass'); 
     setTimeout(() => { 
      cb(); 
     }, 2000); 
    } 
} 
+0

是'instance'的「英雄」實例數組? – evolutionxbox

+0

只是一個示例類。 –

+0

你應該重寫那些'hello'方法來返回承諾 – Bergi

回答

1

創建承諾的一個這樣的數組:

let todo = this.instance.map((obj, i) => { 
    return new Promise((resolve, reject) => { 
     obj.module.hello(err => err ? reject(err) : resolve()); 
    }); 
}); 

Promise.all(todo).then(() => { 
    console.log('done?'); 
    //emitter.emit('ready'); 
}); 
+0

這工作完美!謝謝! –

1

必須從映射函數返回的承諾,那麼你就可以Promise.all等待着他們:

let todo = this.instance.map((obj, i) => { 
    return new Promise(resolve => 
     obj.module.hello(resolve) 
    ) 
}); 

Promise.all(todo).then(() => { 
    console.log('done?'); 
}); 
+0

設待辦事項= this.instance.map((OBJ,I)=> { \t返回新無極((解析)=> { \t obj.module.hello(解析); \t}) \t}); –