Sagar Deshpande
Sagar Deshpande

Reputation: 83

Unhandled Promise Exception

I am new in JavaScript and pubnub. I am trying to pubnub in javascript. Following is my code

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

I am getting here an Unhandled promise exception. Following is an error logs:

(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

Can anyone please help?

Upvotes: 0

Views: 1429

Answers (3)

Rayan ramirez
Rayan ramirez

Reputation: 31

You should try defining parsedMessage if you haven't already.

const parsedMessage = JSON.parse(message);

Upvotes: -1

Adam
Adam

Reputation: 641

I don't think that your issue is PubNub related. The PubNub SDK's publish uses the callback pattern. Use this to view publish results:

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

If you do not see a PubNub error logged, the issue may have to do with your NPM config. If that's the case, try this answer to UNABLE_TO_GET_ISSUER_CERT_LOCALLY here: https://stackoverflow.com/a/45884819/6193736

Upvotes: 1

epascarello
epascarello

Reputation: 207511

I believe it is yelling at you because it threw an error and you did not catch it.

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

Upvotes: 2

Related Questions