编程语言
首页 > 编程语言> > javascript – 从异步函数获取数据

javascript – 从异步函数获取数据

作者:互联网

我有这个代码:

    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

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

解决方法:

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

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 */
});

标签:javascript,asynchronous,web-sql
来源: https://codeday.me/bug/20190521/1147756.html