javascript - 在不使用回调的情况下将值从嵌套函数返回到它的父级

标签 javascript html opendatabase

我编写了以下函数来检查我的HTML5 openDatabase 表是否已填满或为空:

var that = this;
that.db = openDatabase('dbname', '1.0', "description", 1024 * 1024);

that.tableFilled = function( tableName ) {

    that.db.transaction(function ( tx ) {

        tx.executeSql('SELECT * FROM ' + tableName, [],
            function success( c, results ) {
                return ( results.rows.length > 0 ? true : false );
            },
            function fail() {
                console.log('FAiL');
            }
        );

    });

};

我正在尝试将返回 truefalse 值给tableFilled()

实际上 that.tableFilled('tableName') 返回 undefined

我最终想要实现的是:

if ( that.tableFilled('tableName') ){
    // ...
}

有没有一种方法可以返回truefalse值给父函数tableFilled() 不使用回调 ?

最佳答案

你正在处理一个异步过程,所以你不能直接返回一个值。

然而,您可以做的是返回一个 promise 。您的函数将 promise 在可用时为您提供该值。要从 promise 中获取值(value),您必须添加回调函数。

你仍然需要使用回调函数,但你不再需要嵌套你的函数,你可以序列化它们。

这可能超出了您当前需求的范围,但这是一个非常有趣的概念。如果您想了解更多信息,只需 Google 即可。

这是一个简短的例子:

function my_function() {
    var promise = new_promise();
    do_asynchronous(function callback(result) {
        promise.resolve(result); // gets called after 1 second
    });
    return promise;
}

var promise = my_function();
promise.done(function(result) {
    console.log(result);    // prints "yay!" after 1 second
});

function new_promise() {
    var handlers = [];
    return {
        "resolve": function (result) {
            for (var i = 0; i < handlers.length; i += 1) {
                handlers[i](result);
            }
        },
        "done": function (a_callback) {
            handlers.push(a_callback);
        }
    };
}

function do_asynchronous(callback) {
    setTimeout(function () {
        callback("yay!");
    }, 1000);
}

关于javascript - 在不使用回调的情况下将值从嵌套函数返回到它的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234769/

相关文章:

javascript - 从 Bootstrap 中删除页面顶部空间

javascript参数匿名函数

android - Android 上 Cordova 2.5 中 openDatabase 上的纯硬件 'Undefined' 数据库错误 - 仅用于第一次尝试

javascript - 获取使用gl.texImage2D绘制的纹理的 'red'像素值

javascript - 通过jQuery添加g:select标签

javascript - 在 angular-fullstack 生成器上启用 CORS?

javascript - jQuery:如何 .show() 具有包含特定文本的类的元素?

html - 我无法使用 CSS 正确设置 HTML 元素的高度

javascript - 鼠标悬停在 google chrome 45 css 中不起作用

android - SQLite 数据库 : unknown error (code 14): Could not open database