javascript - 回调、返回值与HTML5 executeSql函数

标签 javascript html callback closures

我有一个大问题。我知道这是关于回调,关闭,但我不知道如何解决问题。这是我的代码

$.Model.extend('Article',
{
     findAll : function(params, success, error){                
                var result = []
                db.transaction(function(tx) {
                    tx.executeSql('select * from contents', [],function(tx, rs) {
                        for(var i=0; i<rs.rows.length; i++) {
                            var row = rs.rows.item(i)
                            result[i] = {
                                id: row['id'],
                                title: row['title'],
                                body: row['body']
                            }
                        }
                    })
                })
                //here result is undefined
                alert(result)
                return result
    }
})
//undefined
var view = Article.findAll

我知道executeSql是异步函数,但是不知道executeSql的结果如何保存和返回。我使用 javascript mvc 和 HTML 离线数据库。

谢谢你的帮助

最佳答案

W3C 网络数据库规范讨论了对异步和同步数据库操作的支持。 (See 4.3 and 4.4)

如果您不能使用同步实现,那么您可能需要考虑像这样解决问题:

$.Model.extend('Article',
{
     findAll : function(params, success, error){                
                var result = []
                db.transaction(function(tx) {
                    tx.executeSql('select * from contents', [],function(tx, rs) {
                        for(var i=0; i<rs.rows.length; i++) {
                            var row = rs.rows.item(i)
                            result[i] = {
                                id: row['id'],
                                title: row['title'],
                                body: row['body']
                            }
                        }

                        success(result); //toss the result into the 'success' callback
                    })
                })
                //here result is undefined
                alert(result)
                return result
    }
})

Article.findAll([], function(view) {
        //...
    }, function() {
        //error occured
    });

关于javascript - 回调、返回值与HTML5 executeSql函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1898178/

相关文章:

html - 将单独的文本与 div 标记放在同一行

jquery - Backbone.js 事件绑定(bind)

javascript - D3 : call() not working for appended text element (Type error)

c++ - C++ 中的回调,模板成员?

javascript - 更改中心的 HTML5 视频按钮

javascript - 使用 Webpack 和 Babel 导出类不起作用

javascript - 如何使用 jQuery/Javascript 缩放单个 SVG 元素?

javascript - 以同样的方式加载同一页面上两个不同div中的ajax内容

javascript - 如何将自定义 jQuery 插件应用于多个元素?

javascript - Function.prototype 判断函数是否已经在 J​​avaScript 中定义