Node.JS返回回调

Node.JS return out of callback

本文关键字:回调 返回 JS Node      更新时间:2023-09-26

我使用这个插件管理器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变量?

你可以给你的模块传递一个回调:

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

您不是在传递回调,而是创建回调。你的函数也不应该自己执行。

你的代码应该是:

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,你已经习惯了。我建议你试试蓝鸟

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

我希望这能澄清:)