一尘不染

如果我多次拒绝/解决Kriskowal q中的问题,会发生什么?

node.js

我正在研究Promise模式,并将kriskowal的q用于node.js,

有以下代码段:

var deferred = Q.defer();
try {
    messageData = JSON.parse(message);
} catch (e) {
    global.logger.warn('Error parsing JSON message.');
    deferred.reject(e);
}
...
if (some_reason)
    deferred.resolve(something);
...
return deferred.promise;

如果解析器都失败并且 some_reason 为true怎么办?

执行是否会从拒绝通过解析开始,并且两个promise的方法都会在不同的时间调用,从而产生错误?

我应该避免多次调用拒绝/解决吗?


阅读 193

收藏
2020-07-07

共1个答案

一尘不染

由于promise只能解析一次(履行
拒绝),因此第一个解决方案获胜,任何进一步的调用都将被忽略。从文档

在所有诺言得到解决(即履行或拒绝)的情况下,解决方案都是永久性的,无法重置。尝试呼叫解决,拒绝或通知诺言已经解决的操作将是无济于事的。

我应该避免多次调用拒绝/解决吗?

您甚至可以设计应用程序,让两个方法相互“竞争”以解决延迟问题,但是通常应避免这样做,以减少读者的困惑。

2020-07-07