Node.js:调用promise' s回调函数

时间:2018-02-19 14:14:10

标签: node.js promise

我最近遇到了一个奇怪的错误。我有这个简单的函数返回 一个承诺:

 create(data) {
            let _self = this;
            return new Promise(function(resolve, reject) {
                if(_self._validateData(data)) {
                    //is valid, so store in database...
                } else {
                    reject(_self.error);
                }
            });
        }

当数据有效时,存储数据并且调用解析回调没有问题。但是,当数据无效时,我立即调用拒绝功能。但是当我这样做时,我收到一个错误。

在进程到达拒绝调用时,是否有可能调用函数未设置拒绝?因为当我运行以下代码时,它完美地运行:

create(data) {
        let _self = this;
        return new Promise(function(resolve, reject) {
            if(_self._validateData(data)) {
                //is valid, so store in database...
            } else {
                setTimeout(function(){reject(_self.error);}, 100);
            }
        });
    }

我真的想避免使用此解决方案。不仅因为它对我来说看起来很难看,而且因为我甚至不确定,如果我理解错误的话。

所以任何想法在这里有什么问题,我该如何解决?

  

对于遇到同样问题的每个人:   这不是一个真正的错误,而是一个"功能" VS Code Debugger(使用v8)。   有关详细信息,请参阅herehere。该问题被称为"同步拒绝"。另外,我只是把它误解为错误。它不是。调试器只是暂停并指出,存在同步拒绝   我继续使用蓝鸟承诺

1 个答案:

答案 0 :(得分:1)

  

在进程到达拒绝调用时,是否有可能调用函数未设置拒绝?

不,那是不可能的。您可以随时拒绝承诺。

  

因为当我[暂停时],它完美地运作

我猜你很快就没有在你的承诺链上设置拒绝处理程序(.catch(…)),并因此而收到“可能未处理的承诺拒绝”警告。