我正在尝试设计一个网页。我有一个函数可以调用,以获取个人主页所需的所有信息。该代码的片段为:

exports.getHomePageData = function(userId, cb) {
    var pageData = {};

    pageData.userFullName = dbUtil.findNameByUserId(userId, function(err){
        if (err) cb(err);
    });
    pageData.classes = dbUtil.findUserClassesByUserId(userId, function(err){
        if (err) cb(err);
    });

    cb(pageData);
}


我遇到的问题是cb(pageData)在我完成元素设置之前就被调用了。

我已经看到人们使用异步库来解决此问题,但是我想知道是否还有其他方法可以使我不需要更多模块。

最佳答案

一种可能的方法:

exports.getHomePageData = function(userId, cb) {
    var pageData = {},
        filler   = function() {
          if ('userFullName' in pageData
                && 'classes' in pageData)

            cb(null, pageData);
        };

    dbUtil.findNameByUserId(userId, function(err, name) {
        if (err) {
          cb(err);
          return;
        }
        pageData.userFullName = name;
        filler();
    });
    dbUtil.findUserClassesByUserId(userId, function(err, classes) {
        if (err) {
          cb(err);
          return;
        }
        pageData.classes = classes;
        filler();
    });
}

关于node.js - 在调用回调之前如何设置变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19624013/

10-13 07:18