Joe
Joe

Reputation: 137

Export module after promise completes

I actually want to put the "read" function in a different module and then require it in my main app.js. (I'm quite new to using promises)

[REVISED]

var dir = require('node-dir');
var files = function getFiles(){

        return new Promise(function (resolve, reject) {
        dir.files('../sample/sample', function (err, res){
            if (err) {
                    reject(err);
                    console.log('Oops, an error occured %s', err);
            }
            else {
                      resolve(res);
                      return res;
                  }
            });
        });
}

console.log(files);

module.exports = files;

UPDATE AGAIN:

//read.js

var dir = require('node-dir');
var Promise = require('promise');


module.exports = new Promise(function (resolve, reject) {
        dir.files('../sample/sample', function (error, results){
            if (error) {
                    reject(error);
                    console.log('Oops, an error occured %s', err);
            }
            else {
                      resolve(results);
                  }
            });
        })

//app.js

var filelist = require('./read');

filelist.then(function (res){

    console.log(res);
})

How do I go about that? I've tried "return new promise..." and putting the whole thing in a getFile function, but it doesn't return anything.

What am I doing wrong?

Upvotes: 10

Views: 22130

Answers (2)

alditis
alditis

Reputation: 4817

Async/Await approach

Example for promise-mysql module.

connection.js

const mysql = require('promise-mysql');

const dbDev = async () => {
    return await mysql.createConnection({
        host: YOUR_MYSQL_HOST,
        user: YOUR_MYSQL_USER,
        password: YOUR_MYSQL_PASSWORD,
        database: YOUR_MYSQL_DB_NAME         
    });
}

module.exports = {
    dbDev
};

app.js

const connection = require('./connection');

const showResult = async () => {
        try {
        const con = await connection.dbDev();
        const result = await con.query(YOUR_QUERY);
        con.end();
        console.log(result);
    } catch (e) {
        console.log(e.message);
    }
}

showResult();

Note for node-dir module

I know the question is about Export module after promise completes but in case of the node-dir module also works synchronously, maybe it will help someone else.

read.js

const dir = require('node-dir');

const files = function() {
    return dir.files(YOUR_DIR, {sync:true});
}

exports.files = files;

app.js

const read = require('./read');

try {
    const res = read.files();
    console.log(res);
} catch (e) {
    console.log(e.message);
}

Upvotes: 0

Achshar
Achshar

Reputation: 5243

This is my code

read.js

var dir = require('node-dir');

var files = new Promise(function (resolve, reject) {
    dir.files('../sample/sample.txt', function (err, res){
        if (err) {
            reject(err);
            console.log('Oops, an error occured %s', err);
        }
        else {
            resolve(res);
        }
    });
});

exports.files = files;

And then use it as such on the file that imports this module.

app.js

var read = require('read.js');

read.files.then(function(res) {
    console.log(res);
});

Your revised code

read.js

var dir = require('node-dir');

var files = function(){
    return new Promise(function (resolve, reject) {
        dir.files('../sample/sample', function (err, res){
            if (err) {
                    reject(err);
                    console.log('Oops, an error occured %s', err);
            }
            else {
                      resolve(res);
                      return res;
              }
        });
    });
}

exports.files = files;

app.js

var read = require('read.js');

read.files().then(function(res) {
    console.log(res);
});

Hope that helps.

Upvotes: 14

Related Questions