javascript - 异步 JavaScript 最佳实践

标签 javascript asynchronous express

使用node.js/express.js,这是我在使用异步代码时遇到的典型问题的示例(函数根据 2 db 调用的请求渲染页面):

exports.index = function(req, res){
    res.render('index', {
        data1: getData1(),
        data2: getData2()
    });
};

下面是一个函数的样子:

function getData1() {
    var assets = db.get("assets");
    assets.find().on('success', function (docs) {
        // What to do ?
    });
}

我尝试使用 async.js,这是一个非常有用的模块,但我仍然缺乏如何处理此类案例的知识。

有人可以建议有关异步 javascript 编码的最佳实践的良好资源吗?

最佳答案

使用异步工作流库,例如async .

function getData1(done) {
    var assets = db.get('assets');
    assets.find().on('success', done);
}

function getData2(done) {
    var assets2 = db.get('assets2');
    assets2.find().on('success', done);
}

exports.index = function(req, res, next){
    async.parallel({
        d1: getData1,
        d2: getData2
    }, render);

    function render (err, data) {
        if (err) {
            return next(err);
        }

        res.render('index', {
            data1: data.d1,
            data2: data.d2
        });
    });
};

通过这种方式,您可以坚持整个 Node 包中使用的 callback(err, result) 风格,同时保持代码的理智和美观。 async提供简化工作流程的方法。在本例中,我使用了 async.parallel 方法,该方法允许您同时运行任意数量的回调,然后在其他回调完成时运行作为第二个参数提供的函数。

关于javascript - 异步 JavaScript 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792056/

相关文章:

node.js - 使用 mongoose 连接到 mongodb 时出现 "Cannot read property ` 消息 ` of null"

node.js - 如何从 Mongoose 模型中的数组中删除对象

javascript - 使用 sessionStorage 显示/隐藏 "splash page"的主页内容是不是很糟糕?

c# - 使用 HttpClient 进行异步文件下载时的错误检查

ios - 延迟显示异步获取的项目

javascript - 变量范围(module.exports + socket.io 设置)

javascript - 如何在 Chart.JS 中显示饼图上的数据子集,同时在悬停时仍显示超集?

javascript - 我如何使用 reactjs 回调函数

javascript - Node.js AWS S3 上传从不调用 End 函数

javascript - 如何创建一个跟踪股票价格的 Javascript 对象?