2

我正在尝试将对象数组返回给父函数,以便可以将它们附加到 HTML 中的 div 中。

我所拥有的功能似乎正在运行不正确的序列。这是我的功能:

function getRounds() {
    var db = connectDB();
    var items = new Array();
    db.transaction(function(tx) {
        tx.executeSql('SELECT * FROM round', [], function(tx, results) {
            var len = results.rows.length;
            for (var i=0; i<len; i++){
                items.push(results.rows.item(i));
            }
            alert('ONE: '+ JSON.stringify(items));
            return items;
        }, errorCB);
        alert('TWO: '+ items)
    });
    alert('THREE: '+ items);
    return items;
}

发生的情况是我收到“三:”的警报,然后是“二:”,然后是“一:[对象]”。

从逻辑上讲,由于函数是嵌套的,因此它应该以另一种方式发出警报, One 返回一个对象数组,这正是我需要返回给主函数(getRounds)的对象。

有什么想法可以实现这一目标吗?

我正在使用 Appgyver 的 Steroids,可以在此处找到有关 Web SQL 数据库存储的文档:http: //docs.appgyver.com/en/stable/cordova_storage_storage.md.html#SQLResultSetRowList

4

1 回答 1

10

这是因为调用是异步的!你需要使用回调!

function getRounds(callback) {
    var db = connectDB();
    var items = new Array();
    db.transaction(function(tx) {
        tx.executeSql('SELECT * FROM round', [], function(tx, results) {
            var len = results.rows.length;
            for (var i=0; i<len; i++){
                items.push(results.rows.item(i));
            }
            alert('ONE: '+ JSON.stringify(items));
            callback(items)
        }, errorCB);
    });
}

getRounds(function(items) {
    console.log(items);
});
于 2014-05-23T12:55:09.503 回答