承诺完成后导出模块

Export module after promise completes

我实际上想将 "read" 函数放在另一个模块中,然后在我的主 app.js 中需要它。 (我对使用承诺很陌生)

[修订]

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;

再次更新:

//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);
})

我该怎么做?我试过 "return new promise..." 并将整个东西放在 getFile 函数中,但它没有 return 任何东西。

我做错了什么?

这是我的代码

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;

然后在导入该模块的文件中使用它。

app.js

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

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

您修改后的代码

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);
});

希望对您有所帮助。

Async/Await接近

promise-mysql 模块的示例。

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();

node-dir 模块注意事项

我知道问题是关于 承诺完成后导出模块 但在 node-dir 模块的情况下也可以 同步 ,也许它会对其他人有所帮助。

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);
}