node.js - Nodejs 获取数据异步函数

标签 node.js

我在使用匿名函数 Node js 时遇到问题,想知道如何从异步函数中获取数据。这样它会返回空的 Web api,因为它在异步调用 sqlite 结束之前返回

restapi.get('/data', function(req, res){
var array = [];
    db.each("SELECT value FROM counts", function(err, row){
        array.push(row);
    });

res.json(array);
});

有人可以向我解释一下它是如何工作的以及解决方法吗?谢谢

最佳答案

这就是使用回调进行异步编程的全部要点。异步函数不返回结果,而是接受回调,该回调将在作业完成后立即触发。回调将接收异步工作的结果作为其参数。

不要期望异步函数返回任何内容。相反,将结果处理逻辑嵌套在传递给该函数的回调中。

因此,您的截图应如下所示:

restapi.get('/data', function(req, res){
    var array = [];

    db.each("SELECT value FROM counts", function(err, row) {
        if (row) {
            array.push(row);
        }
        else {
            res.json(array); // When there are no more rows
        }
    });
});

使用平面回调非常痛苦。这种无休止的嵌套往往会让你的代码变得非常困惑。如果您为回调命名,并使用命名版本而不是嵌套,您可以帮助自己。这只会让你到目前为止。更好的解决方案是使用控制流库,如 async 。但是,要使其正常工作,所有回调都必须是可组合的——也就是说,遵循接受错误对象作为第一个参数的约定。请参阅this explaination ,例如。

关于node.js - Nodejs 获取数据异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666820/

相关文章:

javascript - 是否可以使用 Kotlin 构建完整的 Node.js Web 应用程序?

node.js - 内存泄漏 Meteor.http

javascript - 模拟虚拟世界 : continuous or discrete steps?

javascript - 将日期转换为耗时

node.js - 通过 NodeJS 传输音频的最快方式

node.js - sails : disable `blueprints actions` in production, 因为它创造了巨大的安全足迹?

javascript - node js express 在输入时检测谷歌浏览器的地址栏自动完成

node.js 相当于 python 的 if __name__ == '__main__'

mysql - 无法使用主目录中的 .my.cnf 从 Node.js 客户端连接到 MySql

node.js - 快速路线无法运行