nodejs + sqlite:查询执行顺序
nodejs + sqlite: query execution order
对于带有 nodejs 的 Sqlite,您不能让调用执行顺序等于查询的实际数据库执行顺序。
例如,在此伪代码中,您无法预测是否会在 B 之前插入 A,反之亦然:
function() {
db.run("INSERT A", function() { });
db.run("INSERT B", function() { });
}
但是回调的执行顺序呢?如果 INSERT A 的回调将在 INSERT B 的回调之前调用,您可以推断 A 将在 B 之前插入?
当代码执行开始时,所有回调都按 FIFO
顺序传递给 event queue
,事件队列监视当前堆栈执行,如果堆栈为空,则立即传递 first position's callback
到 stack
.
因此,在您的情况下,如果调用 INSERT A
回调,那么它会在 INSERT B
回调执行之后首先执行。
这里推荐 YouTube link
https://www.youtube.com/watch?v=8aGhZQkoFbQ 正确理解 event loop
你可以从这里得到很多想法,因为这个人以合适的方式解释了一切
对于带有 nodejs 的 Sqlite,您不能让调用执行顺序等于查询的实际数据库执行顺序。 例如,在此伪代码中,您无法预测是否会在 B 之前插入 A,反之亦然:
function() {
db.run("INSERT A", function() { });
db.run("INSERT B", function() { });
}
但是回调的执行顺序呢?如果 INSERT A 的回调将在 INSERT B 的回调之前调用,您可以推断 A 将在 B 之前插入?
当代码执行开始时,所有回调都按 FIFO
顺序传递给 event queue
,事件队列监视当前堆栈执行,如果堆栈为空,则立即传递 first position's callback
到 stack
.
因此,在您的情况下,如果调用 INSERT A
回调,那么它会在 INSERT B
回调执行之后首先执行。
这里推荐 YouTube link
https://www.youtube.com/watch?v=8aGhZQkoFbQ 正确理解 event loop
你可以从这里得到很多想法,因为这个人以合适的方式解释了一切