Node.js NodeJS模块无法从闭包内部返回数据

Node.js NodeJS模块无法从闭包内部返回数据,node.js,Node.js,我正在尝试使用以下代码创建一个调用API的模块: var key = require('./keys').slack; var unirest = require('unirest'); module.exports.apiCall = function() { var args = {"token": key, "channel": "C07RLKT6C", "text": "DebugmessagePlsIgnore", "as_user": true}; var req

我正在尝试使用以下代码创建一个调用API的模块:

var key = require('./keys').slack;
var unirest = require('unirest');

module.exports.apiCall = function() {
    var args = {"token": key, "channel": "C07RLKT6C", "text": "DebugmessagePlsIgnore", "as_user": true};

    var req = unirest.post("https://slack.com/api/chat.postMessage");

    req.query(args).end(function(res) {
        // Output res
    });
}

console.log(this.apiCall());
不幸的是,我无法输出res的结果以返回。我正在使用Unirest模块请求HTTPS数据


谢谢。

您需要一个回调来管理它

var key = require('./keys').slack;
var unirest = require('unirest');

module.exports.apiCall = function(cb) {
    var args = {"token": key, "channel": "C07RLKT6C", "text": "DebugmessagePlsIgnore", "as_user": true};

    var req = unirest.post("https://slack.com/api/chat.postMessage");

    req.query(args).end(function(res) {
        cb(null, res)
    });
}

this.apiCall(function(err, res) {
    console.log(res)
});
你需要回电话

//module.js

var key = require('./keys').slack;
var unirest = require('unirest');

module.exports.apiCall = function(callback) {
    var args = {"token": key, "channel": "C07RLKT6C", "text":  "DebugmessagePlsIgnore", "as_user": true};

    var req = unirest.post("https://slack.com/api/chat.postMessage");

    req.query(args).end(callback);
}

// another file
var apiCall = require('./module');

apiCall(function(res) {
    console.log(res);
});

你不能那样做@SLaks抱歉,但我不理解链接。因此,在这种情况下,所有使用此函数的函数都必须使用回调?还有其他选择吗?你可以使用回调、承诺等。我更喜欢承诺,你可以在网上找到一些教程。我会查一下承诺。嗨,谢谢你的帮助,但是因为Devalian之前已经回答过了,我会选择他的答案作为被接受的答案,但我会投票给你的。好的。我想他可能错了。你不想在模块外使用该功能吗?我已经在模块外尝试过了,他的功能似乎正常,但我必须删除该功能。从根本上说。