这是我的代码:
async.auto({
client: service.findClient,
existingChat: ['client', service.findChat],
chat: ['client', 'existingChat', service.createChat]
}, (err) => {
if (err) return service.handleError(err);
service.emitChatEvent();
service.editMenu();
});
使用Bluebird Promises处理它的最佳方法是什么?
对我来说最令人困惑的是这一行:
chat: ['client', 'existingChat', service.createChat]
service.createChat
应该可以访问service.findClient()
和service.findChat()
个结果。
答案 0 :(得分:0)
您可以查看其他已创建的模块,例如async-bluebird,或者您可以自己动手。根据您的问题,您似乎不一定需要自己的auto()
承诺实施,只是您的示例的工作版本。在这种情况下,您可以通过使用链接和all()
函数的组合来实现它。例如(未经测试且不在我的头顶):
let fc = service.findClient(message);
Promise.all([fc, fc.then(service.findChat)])
.then(service.createChat);
首先,我从findClient
函数创建一个promise,然后为all
函数创建一个必需的promise的数组。第一个是初始承诺,而第二个是第一个进入第二个函数的链式版本。当两者都完成后,all
函数会将两个promises的结果返回到结果数组中。
答案 1 :(得分:0)
我想我找到了解决方案:
service.findClient(message)
.then((client) => [client, service.findChat(client)])
.spread(service.createChat)
.then(service.emitChatEvent)
.then(service.editMenu)
.catch(service.handleError);