首頁>Program>source

我有一个expressjs應用程式,並在特定路徑上呼叫了一个函式,该函式通過呼叫 res.json与資料庫中的使用者进行响應 以資料庫文件為引數.我使用基於Promise的庫,並且我想在將資料庫文件放入响應中的回撥內聯.但是当我這樣做時程式会失败.有人可以解釋為什麼吗? 我也想知道為什麼要內聯呼叫 console.log 實際工作.两種方法 res.json之間有一些根本區別吗 和 console.log

以下是有效和無效的示例.假設 getUserFromDatabase() 返迴使用者文件的承诺。

//This works
var getUser = function(req, res) {
    getUserFromDatabase().then(function(doc) {
        res.json(doc);
    });    
} 
//This does not work (the server never responds to the request)
var getUserInline = function(req, res) {
    getUserFromDatabase().then(res.json);    
} 
//This works (the object is printed to the console)
var printUser = function(req, res) {
    getUserFromDatabase().then(console.log);    
}
最新回復
  • 5月前
    1 #

    json 函式丢失其正確的 this.then以来使用時具有約束力 將直接呼叫它而不參考 res 父物件,因此將其繫結:

    var getUserInline = function(req, res) {
        getUserFromDatabase().then(res.json.bind(res));    
    }
    

相似問題

  • python:汇总列表中每个元組的第二个值
  • 使用javascript設置供應商前缀的CSS