我有一个客户列表,然后每个客户都有一系列要运行的任务。在psudeocode中:
Get all customers
For each customer, get list of tasks
For each task, run task
但是,我想在运行这些任务时利用JavaScript的异步特性。有了承诺,我可以做类似的事情:
getAllCustomers().then(function(customers) {
var taskGetters = [];
customers.forEach(function(customer) {
taskGetters.push(getCustomerTasks(customer).then(function(tasks) {
var taskDoers = [];
tasks.forEach(function(task) {
taskDoers.push(doTask());
});
return promise.all(taskDoers);
});
});
return promise.all(taskGetters);
}).then(function() {
// clean up
}).catch(function() {
// handle error
});
但是,这遇到了回调存在的一些结构性问题-我开始嵌套东西,而不是保持诺言应具有的干净的伪同步结构。在保留诺言的结构优势的同时,我该如何解决呢?
最佳答案
如果我记得您正在使用蓝鸟,那么您可以:
getAllCustomers().map(function(customer) {
return Promise.map(customer, getCustomerTasks).map(doTask);
}).then(function() {
}).catch(function() {
// handle error
});