2015-09-20 87 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

你可以使用回調,承諾等 我更喜歡Promises,你可以在網上找到一些教程。 – 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中刪除「this。」)。 – Justin