簡體   English   中英

Javascript:將參數傳遞給回調函數

[英]Javascript: pass parameters to callback function

我想在此數據庫查詢返回的數據上調用函數,如下面的代碼片段所示。

function connectDB(query, data, callback) {
    pg.connect(process.env.DATABASE_URL, function (err, client) {
        if (err) {
            console.log(err);
        } else {
                client
                    .query(query, data, function (err, result) {
                        callback(result.rows);                            
                    });
        }
     }
}

function foo(data) {
  connectDB("SELECT * FROM mytable WHERE id=$1", someID, callbackfn(data));
}

我不知道如何編寫callbackfn,這樣我就可以同時使用原始函數中的數據和db結果中的行。

function callbackfn(data) {
  return function(rows) {
   // Do something with rows and data
  }
}

回調函數不接受任何參數。 怎么樣:

function callback(rows) {
  /* not sure what your intention was here? nested functions? */
  return function () {
    return function () {
        // Do something with rows
    }
  }
}

明確地說,您可以在哪里發布調用connectDB函數的地方嗎? 由於callback是傳遞給connectDB之后的變量的名稱。

為什么要定義回調函數? 請對此進行詳細說明。 另外,嘗試像這樣調用connectDB

 connectDB(query, data, function(rows) {
       // Do something with rows
 });

閱讀有關回調的答案

您擁有令人難以置信的嵌套函數級別。 此外,您將回調定義為參數,但是,如果您不調用基函數,而又將“回調”作為參數,它將不會使用您定義的回調函數。 如果您希望始終傳遞相同的回調,那么將其作為參數提供就沒有意義,可以直接在“ connectDB”函數內部調用“ callback”。 此外,您的回調函數返回一個函數,因此應使用again ()再次調用它。 然后,您的主要回調函數需要從外部接受行作為參數。 我使用callback參數保留您的代碼,因為我“希望”同一個名字只是一個示例,以說明您希望每次提供一個函數來按需操作行。 您的代碼應如下所示:

function connectDB(query, data, callback) {
    pg.connect(process.env.DATABASE_URL, function (err, client) {
        if (err) {
            console.log(err);
        } else {
                client
                    .query(query, data, function (err, result) {
                        // this returns a function so it needs to be called again
                        callback(result.rows)();                            
                    });
        }
     }
}

// third inner function was useless
function callback(rows) {
  return function () {
    // Do something with rows
  }
}

// the third parameter HAS TO BE callback, otherwise you will not pass the function you defined. 
connectDB(query, data, callback);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM