我正在研究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的方法都会在不同的时间调用,从而产生错误?
我应该避免多次调用拒绝/解决吗?
由于promise只能解析一次(履行 或 拒绝),因此第一个解决方案获胜,任何进一步的调用都将被忽略。从文档:
在所有诺言得到解决(即履行或拒绝)的情况下,解决方案都是永久性的,无法重置。尝试呼叫解决,拒绝或通知诺言已经解决的操作将是无济于事的。 我应该避免多次调用拒绝/解决吗?
在所有诺言得到解决(即履行或拒绝)的情况下,解决方案都是永久性的,无法重置。尝试呼叫解决,拒绝或通知诺言已经解决的操作将是无济于事的。
您甚至可以设计应用程序,让两个方法相互“竞争”以解决延迟问题,但是通常应避免这样做,以减少读者的困惑。