bdougie
bdougie

Reputation: 781

Can debugger be called in a Javascript Promises?

I am attempting to use a library I found on github and unable to debug why the code is not firing.

//slackTypeForm.js

   var Promise = require('bluebird'),
    PromiseObject = require('promise-object')(Promise),
    request = require('request'),
    _ = require('lodash'),
    Cubby = require('Cubby');

Promise.promisifyAll(request);

var SlackAutoInviter = PromiseObject.create({
    initialize: function ($config) {
        this._typeformUID = $config.typeformUID;
        this._typeformKey = $config.typeformKey;
        this._typeformEmailField = $config.typeformEmailField;
        this._typeformFirstNameField = $config.typeformFirstNameField;
        this._typeformLastNameField = $config.typeformLastNameField;
        this._slackName = $config.slackName;
        this._slackToken = $config.slackToken;
        this._dataFile = $config.dataFile;
        this._cubby = new Cubby({file: this._dataFile});
        this._cubby.set('form-id-since', this._cubby.get('form-id-since') || 1);
    },

    inviteAll: function ($deferred) {

// debugger is not hitting here debugger;

        var typeFormResponse = _.first(request.getAsync({url: 'https://api.typeform.com/v0/form/' + this._typeformUID + '?key=' + this._typeformKey + '&completed=true&since=' + this._cubby.get('form-id-since') + '&limit=1000', json: true}));

        Promise.map(typeFormResponse.body.responses, this._inviteUser, {concurrency: 5});

        this._cubby.set('form-id-since', Math.floor(Date.now() / 1000));

        $deferred.resolve();
    },

    _inviteUser: function ($deferred, form) {
        var inviteResponse = _.first(request.postAsync({
            url: 'https://' + this._slackName + '.slack.com/api/users.admin.invite',
            form: {
                email: form.answers[this._typeformEmailField],
                first_name: form.answers[this._typeformFirstNameField],
                last_name: form.answers[this._typeformLastNameField],
                token: this._slackToken,
                set_active: 'true'
            },
            json: true
        }));

        console.log('[INVITE] ' + form.answers[this._typeformFirstNameField] + ' ' + form.answers[this._typeformLastNameField] + ' <' + form.answers[this._typeformEmailField] + '>');

        $deferred.resolve(inviteResponse.body);
    }
});

module.exports = SlackAutoInviter;

// Is there any info out there on how to debug this promise?

// package.json

{
  "name": "slack-typeform-inviter",
  "version": "0.0.2",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Chad Scira",
  "license": "ISC",
  "dependencies": {
    "bluebird": "^2.3.10",
    "cubby": "0.0.3",
    "harmony": "0.0.1",
    "lodash": "^2.4.1",
    "promise-object": "^0.1.5",
    "request": "^2.47.0"
  }
}

Upvotes: 1

Views: 182

Answers (1)

bdougie
bdougie

Reputation: 781

I am just using console.log(code); it works fine.

I haven't got the definitive answer, but my assumption is it has something to do with the promises being delayed, so console.log it is.

*Update and answer.

The code turned out to be node 0.11.x which uses a different syntax with promises. I have submitted a pull-request on the module githubg pagewith instructions on how to use nvm to upgrade to the unstable version of node to use this code.

npm install -g nvm

nvm install v0.11.14

I was then able to debug the code as I pleased.

Upvotes: 1

Related Questions