我是第一次尝试用 Javascript 编写一些代码,但我猜我没有从概念上理解一些东西!
以下代码对我来说工作正常:
var db = new alasql.Database("db");
db.exec('CREATE TABLE IF NOT EXISTS Myonetwo;');
var aaa = db.exec('select * into Myonetwo from json("http://localhost:8080/app1")',[],function(res){
db.exec('select * from Myonetwo;',[],function(bbb){
console.log(bbb.length);
});
});
但是这个是一样的但是没有内嵌函数的函数,是不行的。
var db = new alasql.Database("db");
db.exec('CREATE TABLE IF NOT EXISTS Myonetwo;');
var aaa = db.exec('select * into Myonetwo from json("http://localhost:8080/app1")');
var bbb = db.exec('select * from Myonetwo;');
console.log(bbb.length);
此外,是否将结果作为函数定义为所有 Javascript 的参数之一?
最佳答案
这是因为 exec
函数是异步,所以在您的第二个示例中,bbb
赋值行将发生在 之前aaa
赋值行整理。
这就是为什么 exec
有一个回调函数作为它的最后一个参数。
在您的第一个代码片段中,事件的时间轴将类似于:
- 第一次执行调用
- 一段时间过去了...
- 第一次执行回调发生
- 第二个 exec 调用执行
- 第二次执行回调发生
在这种情况下,您知道第二次 exec 调用将在第一次 exec 调用之后发生。
您的第二个代码片段的时间轴将是:
- 第一次执行调用
- 第二次执行调用
- 第一个或第二个 exec 调用完成(不确定)
- 第一个或第二个 exec 调用完成(不确定)
您可以看到这将对您的逻辑产生影响。
这是一篇很好的文章,可以了解更多关于异步编程的信息:https://blog.risingstack.com/asynchronous-javascript/
关于javascript - Javascript 是否按顺序运行代码行?并完成处理然后继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898975/