从异步函数获取数据

nuk*_*ukl 5 javascript asynchronous web-sql

我有这个代码:

    function getData(){
        db.transaction(function(tx){
            tx.executeSql('SELECT * from q', [], function(tx, result){
                var q = [];
                for (var i=0; i < result.rows.length; i++) {
                    q.push(result.rows.item(i));
                };
                console.log(q.length);  // 3
                returnData(q);
            });
        });
    }

    function returnData(data){
        console.log(data.length); // 3
        return data;
    }

   var q = getData(); // undefined
Run Code Online (Sandbox Code Playgroud)

它没有按预期工作(它不返回任何东西).假设发生了,因为db.transaction工作异步,但我使用回调来返回数据.有人可以解释为什么它不起作用以及如何解决这个问题?

Ben*_*Lee 6

执行此操作的标准方法是包含您自己的回调,如下所示:

function getData(callback){
    db.transaction(function(tx){
        tx.executeSql('SELECT * from q', [], function(tx, result){
            var q = [];
            for (var i=0; i < result.rows.length; i++) {
                q.push(result.rows.item(i));
            };
            console.log(q.length);  // 3
            callback(returnData(q));
        });
    });
}

function returnData(data){
    console.log(data.length); // 3
    return data;
}

getData(function(q) {
    /* do something with q */
});
Run Code Online (Sandbox Code Playgroud)