簡體   English   中英

javascript回調函數參數

[英]javascript callback function parameters

我想使用javascript調用回調函數,如您從http://docs.phonegap.com/en/3.0.0/cordova_storage_storage.md.html#database_size的此示例代碼所見

function queryDB(tx) {
    tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}

function querySuccess(tx, results) {
    console.log("Returned rows = " + results.rows.length);
    // this will be true since it was a select statement and so rowsAffected was 0
    if (!results.rowsAffected) {
        console.log('No rows affected!');
        return false;
    }
    // for an insert statement, this property will return the ID of the last inserted row
    console.log("Last inserted row ID = " + results.insertId);
}

function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB, errorCB);

調用方法“ queryDB”時不帶任何參數,但是已定義該函數以接收變量“ tx”。 來自PHP,我不明白它是如何工作的,因為它可以。 還有querySuccess,它接收2個參數並且也可以工作。

我的問題是我需要發送1我自己的參數,所以我修改了對queryDB的調用,如下所示:

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB(myParam), errorCB);

function queryDB(tx, myParam) {
    tx.executeSql('SELECT * FROM' + myParam, [], querySuccess, errorCB);
}

但是是行不通的。

1)為什么會收到未發送的參數? 2)如何添加自己的參數而不破壞它?

嘗試這個:

db.transaction(function() { queryDB(tx, myParam); }, errorCB);

function queryDB(tx, myParam) {
    //logic here
}

事務功能正在尋找不包含參數的回調方法。 您可以通過分配匿名函數來“劫持”,該匿名函數使用參數調用所需的函數。

當你寫

db.transaction (queryDB, errorCB);

您將函數本身作為參數傳遞,但是如果嘗試這樣做:

db.transaction (queryDB(myParam), errorCB);

您將函數的結果作為參數傳遞,這將產生錯誤。

db.transacción接收參數是2個函數,如果您需要傳遞自定義參數,只需將它們寫在聲明中

function queryDB(tx, myParam) {
    //Using your myParam
    tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
...
db.transaction(queryDB, errorCB);

請記住,javascript是一種解釋型編程語言,不是面向對象的

好的,我想我已經找到了答案。 從這里閱讀http://theelitist.net/passing-additional-arguments-to-a-callback-function-in-javascript我已經意識到Dawson Loudon的響應幾乎是完整的,但是他錯過了應該是“ tx”變量傳遞給第一個調用第二個函數的函數,它是:

db.transaction(function(tx) { queryDB(tx, myParam); }, errorCB);

function queryDB(tx, myParam) {
    //logic here
}

感謝您的時間和幫助。

暫無
暫無

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

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