Reputation: 137
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
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
Reputation: 5243
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.
var read = require('read.js');
read.files.then(function(res) {
console.log(res);
});
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;
var read = require('read.js');
read.files().then(function(res) {
console.log(res);
});
Hope that helps.
Upvotes: 14