未处理的承诺异常

时间:2019-01-30 04:21:29

标签: javascript node.js exception-handling promise pubnub

我是JavaScript和pubnub的新手。我正在尝试用JavaScript发布。以下是我的代码

const PubNub = require('pubnub')

const credentials = {
    publishKey   : 'pub-c-58dae4c4-4a11-4ff5-ad98-a69bf5c086bc',
    subscribeKey : 'sub-c-5d1ca66a-2308-11e9-b712-2656c4b29a42',
    secretKey    : 'sub-c-5d1ca66a-2308-11e9-b712-2656c4b29a42'
}

const CHANNEL = {
    TEST : 'TEST',
    TESTTWO : 'TESTTWO',
    BLOCKCHAIN : 'BLOCKCHAIN'
}

class PubSub {
    constructor(blockchain) {
        this.blockchain = blockchain;
        this.pubnub = new PubNub(credentials);
        this.pubnub.subscribe( { channel: [Object.values(CHANNEL)] });
        this.pubnub.addListener( this.listener())
    }

    listener() {    
        return {
            message: messageObject => {
                const { channel, message } = messageObject
                console.log("Message received on channel "+channel + ". Message is "+message);
                if (channel === CHANNEL.BLOCKCHAIN) {
                    this.blockchain.replaceChain(parsedMessage);
                }
            }
        }
publish( {channel, message}) {

        this.pubnub.publish( {channel, message });
    }

broadcastChain() {
        this.publish( { 
            channel: CHANNEL.BLOCKCHAIN,
            message: JSON.stringify(this.blockchain.chain)
            })
        }
}
module.exports = PubSub

我在这里遇到未处理的诺言异常。以下是错误日志:

(node:9456) UnhandledPromiseRejectionWarning: Error: Validation failed, check status for details
    at new PubNubError (C:\Users\sagardeshpande.deshp\test_cryptochain\node_modules\pubnub\lib\core\components\endpoint.js:134:112)
    at _class.exports.default (C:\Users\sagardeshpande.deshp\test_cryptochain\node_modules\pubnub\lib\core\components\endpoint.js:32:31)
    at PubSub.publish (C:\Users\sagardeshpande.deshp\test_cryptochain\pubnub.js:58:25)
    at PubSub.broadcastChain (C:\Users\sagardeshpande.deshp\test_cryptochain\pubnub.js:66:14)
    at Timeout.setTimeout [as _onTimeout] (C:\Users\sagardeshpande.deshp\test_cryptochain\index.js:10:26)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
(node:9456) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:9456) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我相信它对您大吼大叫,因为它引发了错误并且您没有发现它。

this.pubnub
  .publish( {channel, message })
    .then(result => {
      // you probably should handle this when successful?
    })
    .catch(error => {  // catch the errors
      console.log(error);
    });

答案 1 :(得分:0)

我认为您的问题与PubNub有关。 PubNub SDK的publish使用回调模式。使用它来查看发布结果:

this.pubnub.publish( {channel, message }, function(status, response) {
    console.log('Publish Result: ', status, response)
});

如果您没有看到记录的PubNub错误,则问题可能与您的NPM配置有关。如果是这种情况,请在此处尝试UNABLE_TO_GET_ISSUER_CERT_LOCALLY的答案:https://stackoverflow.com/a/45884819/6193736

答案 2 :(得分:-1)

如果尚未定义,请尝试定义parsedMessage

const parsedMessage = JSON.parse(message);