2014-10-30 73 views
0

如何從內部回調返回,在下面的場景中,正在返回一個json數據,當我試圖做console.log時,它打印[功能]而不是JSON值如何從回調節點返回數據

exports.tests = function(tagName, out) { 

    model.findbyTag(tagName, function(data) { 

     var json = { 
      "name" : 'java', 
      "data" : "SomeData" 
     } 

     return json; 

    }); 

} 

console.log(this.tests)

它輸出

[Function] 

我在做什麼錯,所以當這個方法執行時,它應該返回json數據

+0

你不能從一個回調 – dandavis 2014-10-30 07:59:54

+0

返回的數據有沒有什麼辦法的時候finshed處理 – anish 2014-10-30 08:01:36

+0

肯定的是,簡單地加上「執行console.log(JSON)」 – dandavis 2014-10-30 08:02:04

回答

1
module.exports = function() { 

    var _return = {}; 

    _return.someName = function(tagName ,callback){ 
     model.findbyTag(tagName, function(err ,data) { 
      var json = { 
       "name" : 'java', 
       "data" : "SomeData" 
      } 
      callback(json); 
     }); 
    } 

    return _return ; 
} 

您可以在另一個文件中使用上面的代碼是這樣的:

var sample_file = require('above code file address'); 

sample_file.someName(someTagName , function (data) { 
    console.log(data) // this data is the json data 
}) 
+0

該代碼工作完美,請@dandavis你爲什麼這麼說? – 2014-10-30 08:14:31

+0

@ Daniel.V:因爲我在編輯和修復之前討論過代碼:http://stackoverflow.com/revisions/26647812/1 – dandavis 2014-10-30 08:24:30

0

你不能從回調中返回數據,而應該將一個函數傳遞給可以在回調函數內部調用的方法結果。

例子:

exports.tests = function(tagName, out, returnFunction) { 

    model.findbyTag(tagName, function(data) { 

     var json = { 
      "name" : 'java', 
      "data" : "SomeData" 
     } 
     // Call the returnFunction instead of trying to return data 
     returnFunction(json); 

    }); 

} 

然後調用它像這樣:

this.tests('tagName', 'out', function(r) { 
    // Where "r" is the result of the callback 
    console.log(r); 
}); 
-1

您需要如果您在t中使用Node,則使用Node發射器他當然是第一名。

const EventEmitter = require('events'); 

class MyEmitter extends EventEmitter {} 

const myEmitter = new MyEmitter(); 
myEmitter.on('event', (someProps) => { 
    console.log('an event occurred!'); 
}); 
myEmitter.emit('event', {...someProps}); 

然後,您可以訪問json並調用所需的任何進一步操作。使用事件可能會使您稍微重構應用程序。 https://nodejs.org/docs/latest/api/events.html#events_emitter_on_eventname_listener

+0

歡迎提供一個解決方案的鏈接,但請確保您的答案沒有用它:[添加鏈接上下文](// meta.stackexchange.com/a/8259),這樣你的同行用戶就會知道它是什麼以及它爲什麼在那裏,然後引用你所在頁面的最相關部分鏈接到目標頁面不可用的情況。 [僅僅是一個鏈接的答案可能會被刪除。](// stackoverflow.com/help/deleted-answers) – paper1111 2018-02-21 02:01:10