2015-09-20 2 views
0

творю пытается сделать модуль, который вызывает к API, используя следующий код:NodeJS модуль не может возвращать данные из внутренней крышки

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()); 

К сожалению, я не могу вывести результат рес к вернуть. Я использую модуль Unirest для запроса данных HTTPS.

Спасибо.

+0

Вы не можете этого сделать. http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks

+0

@SLaks Извините, но я не понимаю ссылку. – Justin

ответ

0

Вам нужен обратный вызов для управления, что

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) 
}); 
+0

Итак, в этом случае все функции, которые используют это, должны будут использовать обратный вызов? Есть ли другие альтернативы? – Justin

+0

Вы можете использовать обратные вызовы, обещания и т. Д. Я предпочитаю обещания, вы можете найти несколько обучающих онлайн. – DevAlien

+0

Ах. Я посмотрю обещания. – Justin

0

Вам нужен обратный вызов.

//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); 
}); 
+0

Привет, спасибо за помощь, но так как DevAlien ответил на это раньше, я выберу его ответ как принятый, но я продолжу ваш. – Justin

+0

Хорошо. Подумайте, что он может ошибаться. Вы не хотите использовать функцию вне модуля? –

+0

Я пробовал это за пределами модуля, похоже, он работает (но я должен удалить «это» из apiCall). – Justin

Смежные вопросы