gpt4 book ai didi

node.js - 允许在 Node.js 中调用终止函数之前完成多个异步调用

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:03 24 4
gpt4 key购买 nike

我正在使用node.js 搜索sqlite 图书表并仅返回未 checkout 的图书。我的问题是,我传递给 stmt.each() 的第二个函数是否会等待 isCheckedOut() 完成后再执行?

目前它似乎正在等待,但我担心如果 isCheckedOut() 需要更长的时间来执行(即:更大的数据库),那么第二个函数将运行得太早并且不会返回所有结果。

如果第二个函数过早运行,我怎样才能让它等待?

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('database');

function showAvailableBooks(callback) {
var stmt = db.prepare("SELECT * FROM books");
var results = [];

stmt.each(function (err, row) {

isCheckedOut(row.Barcode, function (err, checkedOut) {
if (!checkedOut) {
results.push({Title: row.Title, Author: row.Author, CallNumber: row.CallNumber});
}
});

}, function () {
callback(results);
});
}

showAvailableBooks(function () {
console.log("# of results: " + results.length);
});

最佳答案

不,stmt.each 不会等待所有 isCheckedOut 调用来运行其回调(如果它们被延迟)。现在,作为 sqlite(无网络延迟)和小型数据库,它可能会工作,但如果您尝试不同的远程或更大的数据库,它可能不会。

Rob W 使用计数器回答了类似的问题:https://stackoverflow.com/a/21185103/4925989 ,但还有其他方法可以让完成回调等待。

关于node.js - 允许在 Node.js 中调用终止函数之前完成多个异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com