2016-03-20 61 views
2

我主要的代碼的回調,我做了以下內容:調用模塊的本地功能在「請求」

var module = require('./module') 

module.FooA(module.FooB); 

module.js包含下面的代碼:

var request = require('request'); //using of npm "request" 

exports.FooB = function(data){ /*operations on data here*/ }; 

exports.FooA = function(callback){ 

    var url = some_link; 

    request(url, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      callback(body); 
     }; 
    }); 

}; 

的問題是,顯然,即使條件滿足,callback(body)也不運行。 var result = request(url)其次是exports.FooB(result)能夠完成這項工作,但據我所知,顯然不會像回調一樣行事,並且會產生麻煩。

在這種情況下定義回調函數的正確方法是什麼?我是否需要,或者它實際上是同步的,我錯過了要注意它?

+0

我想你發佈的代碼,它工作正常,問題是其他地方。你確定你的要求是200 /好嗎?你可以嘗試與http://jsonplaceholder.typicode.com/users? – Shanoor

+0

@ShanShan對不起,我不完全清楚。這段代碼在後端運行,因此如果出現語法錯誤,它將響應HTTP 500.爲了測試它是否有效,我從前端發送一個變量,在'FooB'中修改它並將其發回並寫出。問題是**,儘管沒有語法錯誤**,我沒有改變我做過的'FooB'客棧曾經發生過。因此,我認爲其內容不會被執行。 –

+0

不要假設任何事情,把console.log放在每一步,你發佈的結構都適合我,並且也適合你。 – Shanoor

回答

2

使用帶錯誤的第一個函數回調參數,這是node.js核心中的默認值,對於您的項目函數是谷歌。

而像@ShanSan表彰,使用的console.logconsole.error或調試console.trace

例子:

var request = require('request'); //using of npm "request" 

exports.FooB = function(error, data){ /*operations on data here*/ }; 

exports.FooA = function(callback){ 

    var url = some_link; 

    request(url, function (error, response, body) { 
     if (error || response.statusCode != 200) { 
      // pass error to callback and if use return you dont need other code block bellow 
      console.error('Error in request', error); 
      return callback(error, null); 
     } 

     // here run if dont have errors 

     // if need more info use the console.log(request); or console.log(body); 

     // use error in first param in callback functions 

     callback(null, body); 
    }); 

}; 
+1

事實上,我發現問題是我錯過了考慮請求的性質,這就是爲什麼變量沒有發送。 'console.log'讓我注意到了。但是,如果我理解得很好,您的解決方案可以處理錯誤,因此它非常好,我將其標記爲已接受。 –