![](/img/trans.png)
[英]How to pass function parameters to callback function in 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.