Javascript 在node中实现基于承诺的连续流程的最佳方式是什么?
我正在从事一个项目,在这个项目中,我需要创建一个连续的节点流程,该流程反复执行一些基于承诺的任务,而没有结束时间。第一个承诺周期必须在下一个承诺周期开始之前完成。我对实现这一点的最佳方式感到困惑,对于不同的方法是否有利弊 到目前为止,我正在考虑的两个解决方案是: 递归函数:Javascript 在node中实现基于承诺的连续流程的最佳方式是什么?,javascript,node.js,dom-events,eventemitter,Javascript,Node.js,Dom Events,Eventemitter,我正在从事一个项目,在这个项目中,我需要创建一个连续的节点流程,该流程反复执行一些基于承诺的任务,而没有结束时间。第一个承诺周期必须在下一个承诺周期开始之前完成。我对实现这一点的最佳方式感到困惑,对于不同的方法是否有利弊 到目前为止,我正在考虑的两个解决方案是: 递归函数: var repeat = function () { MethodThatReturnsAPromise() .then(function () { repeat();
var repeat = function () {
MethodThatReturnsAPromise()
.then(function () {
repeat();
});
};
repeat();
使用节点eventemitter
var events = require('events');
var eventEmitter = new events.EventEmitter();
var run = function () {
MethodThatReturnsAPromise()
.then(function () {
eventEmitter.emit('complete');
});
};
eventEmitter.on('complete', function () {
run();
});
run();
目前,我倾向于基于事件的方法
这两种方法对node更“正确”或更惯用,或者说根本不重要(我只是痴迷于细节),有什么原因吗?或者有没有第三种更好的实现方法,我不知道(我对node很陌生)?您的第一种实现可能是最好的实现方法。谢谢您的回复。您认为这种方法更好的地方是什么?因为承诺是对事件发射器的高级别、更清晰的抽象。没有理由使用事件发射器,除非您必须这样做,在这种情况下,我不明白您为什么会这么做。最初我离开了第一个解决方案,因为在与node inspector一起运行时(这样我可以在承诺代码中找到内存泄漏),我发现我无法使用“记录堆分配”功能,可能是因为递归函数从未完成,所以inspector无法进行对象计数。这让我怀疑,拥有一个永远无法完成的函数是一个不确定的解决方案。eventemitter代码不会出现此问题。你不认为使用事件方法是合理的吗?严格来说,它不是一个永远不会完成的函数,如果它是同步的,那么它最终会在某个点上破坏堆栈,但它是异步的,这意味着它实际上不使用堆栈。它更像是一个从未完成的循环,而是作为递归函数编写的。最后,它所做的事情与您的事件发射器实现完全相同。您的第一个实现可能是最好的实现方式。谢谢您的回复。您认为这种方法更好的地方是什么?因为承诺是对事件发射器的高级别、更清晰的抽象。没有理由使用事件发射器,除非您必须这样做,在这种情况下,我不明白您为什么会这么做。最初我离开了第一个解决方案,因为在与node inspector一起运行时(这样我可以在承诺代码中找到内存泄漏),我发现我无法使用“记录堆分配”功能,可能是因为递归函数从未完成,所以inspector无法进行对象计数。这让我怀疑,拥有一个永远无法完成的函数是一个不确定的解决方案。eventemitter代码不会出现此问题。你不认为使用事件方法是合理的吗?严格来说,它不是一个永远不会完成的函数,如果它是同步的,那么它最终会在某个点上破坏堆栈,但它是异步的,这意味着它实际上不使用堆栈。它更像是一个从未完成的循环,而是作为递归函数编写的。归根结底,它所做的工作与您的事件发射器实现完全相同。