Node.JS返回回调

时间:2015-05-19 16:34:09

标签: javascript node.js callback return-value node-modules

我正在使用此插件管理器https://github.com/c9/architect并创建节点模块。我遇到的问题是我想从我的节点模块向主机应用程序公开api。问题是插件管理器使用回调来表示所有插件都已注册。

实施例: 在我的主应用程序中,我需要我正在创建的api模块

var api = require('apiModule')

在我的node_modules目录中

module.exports = (function apiModule(){

    architect.createApp(config, function(err, app){
        if(err) throw err;

        return app

    });

})();

这显然不起作用,但表明我正在尝试将app的值返回给主应用程序。

如何将app的值恢复为api变量?

2 个答案:

答案 0 :(得分:0)

你没有传递回调,而是创建一个回调。 你的功能也不应该自己执行。

您的代码应为:

var architect = require('architect');
module.exports = function apiModule(config, callback){

    architect.createApp(config, callback);

});

//otherModule
var apiModule = require('apiModule');
var config = require('config');
apiModule(config, function(err, app){
    if(err) throw err;

    // do something with app
});

如果你正在寻找一个比你习惯的更惯用的api。 我建议你试试bluebird

var architect = require('architect');
var Promise = require('bluebird');
var createApp = Promise.promisify(architect.createApp);
module.exports = function apiModule(config) {
    return createApp(config);
}

// Then in your other module
var apiModule = require('apiModule');
apiModule()
    .then(function(result) {})
    .catch(function(error) {})

我希望清除它:)

答案 1 :(得分:0)

您可以将回调传递给您的模块:

module.exports = function(callback){

    architect.createApp(config, function(err, app){
        if(err) throw err;

        return callback(app); //you should check if callback is a function to prevent error

    });

});

var api = require('apiModule');
api(function(app) {
    console.log(app); //you access your app

})