javascript - 了解 Javascript 异步调用

标签 javascript function asynchronous

我在另一个问题中发布了大部分相同的代码,但我在这里有一个不同的问题 - 我应该如何理解 Javascript 异步代码?

function getUserStatus() {

    var status;

    function querySuccess(tx, results) {
        var len = results.rows.length;
        var row = results.rows.item(0);
        console.log(row['id']);
        status = {
            question: row['id']
        };
    }

    function errorCB(err) {
        console.log(err);
    }

   db.transaction(function(tx) {
        tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1', [], querySuccess, errorCB);
    });
    querySuccess();
    console.log(status);
    return status;
}

我知道我的代码在变量状态被定义之前执行 - 但是我如何停止处理直到状态被定义?我不希望此过程是异步的 - 如果没有从数据库传送任何内容,那么我不希望操作继续。

我的印象是我需要调用 querySuccess(),但我会向它传递什么参数?

我对 Javascript 比较陌生,以前从未遇到过这个概念,我对它的工作原理以及如何让我的代码按我想要的方式执行感到有些困惑。

最佳答案

当我第一次学习异步编程时,我发现将匿名函数作为回调传递更容易:

function getUserStatus(returnCallback) {
    db.transaction(function(tx) {
        tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1', [], 
            function(tx, results) { //querySuccess callback
                var len = results.rows.length;
                var row = results.rows.item(0);
                console.log(row['id']);
                var status = {question: row['id']};
                console.log(status);
                returnCallback(status);
            }, 

            function(err) { //error callback
               console.log(err);
               returnCallback(err);         
            });
    });
}

我重写了一些内容并添加到您的代码中。希望这有帮助:)

不幸的是,我现在没有时间详细介绍和解释所有这些是如何工作的。如果其他人想要编辑此答案来执行此操作,请继续。

祝你好运 OP,一开始学习使用异步技术很困难,但一旦你掌握了它就真的很容易:)

关于javascript - 了解 Javascript 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28468358/

相关文章:

R 包 - 我可以在包中使用全局变量吗?

javascript - 使用一个函数进行多个 setIntervals (Javascript)

ios - 跳过swift ViewController viewDidDisappear等主要功能

javascript - 如何在 reactJS 中使用 AngularJS 指令

javascript - JSDoc Toolkit - 如何在同一行指定@param 和@property

javascript - 模糊和取消模糊我的 html 上的元素

javascript - 在 JSON 数组中搜索时间并将其转换为 'epochtime'

javascript - Node 在同步安装后找不到某些模块

c# - .NET WebClient - 上传数据并获取流

ios - 对象-C : dispatch_async crashes without NSLog