検索

ホームページ  >  に質問  >  本文

node.js - nodejs中module.export为一个异步返回结果时该怎么做?

阿神阿神2781日前564

全員に返信(2)返信します

  • 巴扎黑

    巴扎黑2017-04-17 12:05:14

    你的实现有点奇怪,我觉得下面这种比较适合。

    a.js

    var MongoClient = require('mongodb').MongoClient;
    
    
    var main = {
      getResult: function(callback) {
        MongoClient.connect('mongodb://localhost:27017/local', function(err, db) {
    
          // Use the admin database for the operation
          var adminDb = db.admin();
          // List all the available databases
          adminDb.listDatabases().then(function(dbs) {
            var result = [];
            dbs.databases.forEach(function(element, index) {
              result.push(element.name);
            })
            db.close();
            callback(result);
          });
        });
      }
    };
    
    module.exports = main;

    b.js:

    var a = require("./a");
    
    a.getResult(function(result){
      console.log(result);
    });
    

    另外,require js文件并不用写 .js 扩展名。如果想用promise的方式而不用callback的方式写异步,请参考 bluebird。

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 12:05:14

    module.exports为什么放在then回调函数中呢?
    要知道a.js的主逻辑是异步执行的~~~

    var data = require("a.js");
    console.log(data); 
    

    建议:
    1)export功能模块
    2)export的模块继承EventEmitter
    3)在promise函数执行完毕后,发送事件通知
    4)在导入模块的地方,监听这个事件通知

    返事
    0
  • キャンセル返事