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

我正在研究promise模式,并使用kriskowal的q for 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; 

如果parsing器都失败了, some_reason是真的呢?

执行是否会从拒绝到解决,双方都会在不同的时间被调用,从而产生一个bug?

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

由于承诺只能解决一次 (要么完成拒绝),第一个决议胜出,任何进一步的电话将被忽略。 从文档 :

在承诺得到解决(即履行或拒绝)的所有情况下,该决议是永久性的,不能被重置。 尝试呼叫解决,拒绝或通知,如果承诺已经解决将是一个空操作。

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

你甚至可以devise你的应用程序,让两种方法相互竞争来解决延迟,但总的来说,应该避免减less读者的困惑。