node.js - nodejs中module.export为一个异步返回结果时该怎么做?
阿神
阿神 2017-04-17 12:03:14
0
2
562
阿神
阿神

闭关修行中......

全部回覆(2)
巴扎黑

你的實作有點奇怪,我覺得下面這種比較適合。

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。

Peter_Zhu

module.exports為什麼放在then回呼函數呢?
要知道a.js的主邏輯是非同步執行的~~~

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

建議:
1)export功能模組
2)export的模組繼承EventEmitter
3)在promise函數執行完畢後,發送事件通知
4)在導入模組的地方,監聽這個事件通知

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板