【发布时间】:2017-08-01 16:50:32
【问题描述】:
当someevent 事件被触发时,我只想等待承诺得到解决,然后再继续。但是 slowFunctionThatReturnsPromise 需要很长时间才能解决,并且整个过程在解决之前就关闭了。因此它永远不会完成。我原以为使用then 会等待承诺得到解决,但我不知道为什么它不等待。
emitter.on('someevent', listener)
var listener = function()
{
x.slowFunctionThatReturnsPromise()
.then(function()
{
console.log('done');
})
}
【问题讨论】:
-
Waiting 和 asynchronous 是相反的东西。 同步代码将在继续处理同一调用堆栈中的任何其他代码之前保持进程繁忙,而异步代码仅在当前运行之后被调用调用栈完成。
-
我需要在退出
listener函数之前解决slowFunctionThatReturnsPromise返回的promise -
then回调是异步执行的,因此根据 Promise 的本质(和意图),此类回调将不会在返回 Promise 之前执行,而是在当前代码之后执行任务已完成。所以:不可能。 -
不,再一次,说“异步发生”的部分将在所有当前正在运行的代码都被执行之后执行,直到一个空调用到达堆栈。只有这样,事件队列才会被处理以执行任何挂起的异步代码。
-
看在上帝的份上,如果这实际上是 mocha 退出问题,那么请描述真实问题并显示真实代码。如果您展示真正的问题,而不是您创建的隐藏真正问题的代码的抽象版本,我们总是在这里做得更好。
标签: javascript node.js promise eventemitter