Javascript Chrome中的原生承诺不';无法解决

Javascript Chrome中的原生承诺不';无法解决,javascript,google-chrome,asynchronous,promise,Javascript,Google Chrome,Asynchronous,Promise,我用的是Chrome v。据报道,它为Promise提供本地支持。浏览器确实可以识别Promise构造函数,但以无数示例和web上的文档链接所示的方式使用它是行不通的 以下是我如何创造承诺: var promise = new Promise(function(resolve,reject) { self.events.on("reply",function(event) { if (event.msgId === id) {

我用的是Chrome v。据报道,它为Promise提供本地支持。浏览器确实可以识别Promise构造函数,但以无数示例和web上的文档链接所示的方式使用它是行不通的

以下是我如何创造承诺:

var promise = new Promise(function(resolve,reject) {
            self.events.on("reply",function(event) {
                if (event.msgId === id) {
                    resolve(event.packet);//we get here, but fail to step into method resolve
                }
            });
            self.events.on("cancelReply",function(event) {
                if (event.msgId === id) {
                    reject(Error(event.msgId));
                }
            });
});
调用回调“resolve”没有效果。在调试器中,函数是存在的,但进入它只是将控制传递到下一行。承诺中的“then”方法永远不会被调用:

promise.then(function(result) {
   //we never get here
});

有人能告诉我遗漏了什么吗?

调试器不会进入解析,因为它是本机代码


我怀疑您的代码中有一个bug阻止了
resolve
实际被调用(可能是应答事件没有发生,或者id不匹配)。

调试器不会进入
resolve
,因为它是本机代码。您确定
resolve
实际上正在被调用(应答事件即将到来,并且id[在何处定义?]匹配)吗?还请记住,
promise。然后,在下一次运行循环期间,在promise有机会解决之前,
不会触发。这里不需要承诺。因为它不是事件管理的正确工具。例如,你的承诺只会起作用一次:直到你解决或拒绝它。相反,承诺对(某些类型的)事件很有效。当然,您需要为每个预期事件设置一个承诺,正如您所说,它最多会被实现/拒绝一次,但我们没有迹象表明OP没有意识到这一点,或者没有这样做。@dfsq很多时候,您并不关心事件发射器接口。例如,XHR是一个事件发射器接口,您可以将成功事件映射到解析,将中止、超时和错误事件映射到拒绝,并且根本不关心进度事件(或者单独进行回调)。正如我在对问题的评论中提到的,这是我的驾驶舱错误。Promise的工作原理与Chrome的广告相同。感谢大家的宝贵意见。正在呼叫Resolve。在如何调用Promise.then时出现了一个问题,当我关注调试程序没有进入Promise中的解析处理程序时,我忽略了这个问题。