首页 > 解决方案 > Node.js 数据库结果在函数内部返回较晚

问题描述

Node.js 数据库结果在函数内部返回较晚

常量 db = req.app.db;

function getFeaturebyID(featureids) {
    db.planFeatures.findOne({"_id": featureids }).then(features => {
        return features.planFeaturesTitle;
    });
  }

const planLists ={};
db.planManagement.find({}).toArray((err, planList) => {

// res.end(JSON.stringify(planList));
featurearray = [];
    var j =1;
    planList.forEach(function(row) {
        planLists._id = row._id;
        features = row.planFeatures.split(',');

        for (let i = 0; i < features.length; i++) {
        featurearray[i] = getFeaturebyID(features[i]);
        // console.log(getFeaturebyID(features[i]));
        }
        //row.planFeaturesName[j] = featurearray;
        console.log(featurearray);
        j++;
      });
     //console.log(planList); 

//  res.end(JSON.stringify(req.session));

    res.render('stylist/plan_selection', {
        top_results: planList,
        title: 'Schedule',
        config: req.app.config,
        session: req.session,
        message: common.clearSessionValue(req.session, 'message'),
        messageType: common.clearSessionValue(req.session, 'messageType'),
        helpers: req.handlebars.helpers,
        showFooter: 'showFooter'
    });


});

});

返回 features.planFeaturesTitle;调用函数时延迟返回值。我尝试回调但不起作用

标签: node.js

解决方案


这是由于 node.js 的异步特性,

首先像这样声明你的函数异步,

const getFeaturebyID = async (featureids) => {
    const features = await db.planFeatures.findOne({"_id": featureids });
    return features.planFeaturesTitle;
}

然后像这样使用它,

planList.forEach(async (row) => {
    // your code here
    for (let i = 0; i < features.length; i++) {
        featurearray[i] = await getFeaturebyID(features[i]);
    }
    // your code here
});

推荐阅读