从函数返回值

时间:2018-02-20 13:37:10

标签: node.js

我试图从函数let survey = Survey(id: 0, name: "First survey", questions: [ Question(id: survey.id, text: "Whats your name", survey: survey) // This is not possible. ]) 返回值,但它不起作用。

代码

getdata

2 个答案:

答案 0 :(得分:1)

您可以使用回调或承诺来解决问题。您不能从具有异步代码的函数返回值。

您可以定义getdata接受callback作为参数,

function getdata(MaxId, callback){
    // some code
    con.query('SELECT * FROM users WHERE user_id = ?',[MaxId],(err,rows)=> {
       // some code
       callback(r);
    });
})

然后可以在路线中使用它。

app.post('/home.html',function(req,res){
    // some code
    con.query('SELECT MAX(user_id) as id FROM users',(err,rows)=> {
       // some code
       getdata(json[0].id, (name) => {
          console.log(name);
          // can write to res as well, like res.send(name);
       });
    });
});

答案 1 :(得分:0)

您可以使用ES8中引入的async / await来执行此操作。

app.post('/home.html',function(req,res){
   // pass request param to this new function
   handleRequest(params);
});

// handle request params here if you need to do so
async function handleRequest(params) {
   var userId = await getUserId();
   var data = await getData(userId);
}

async function getUserId()
{
  con.query('SELECT MAX(user_id) as id FROM users',(err,rows)=> {
    if(err) throw err;
    console.log('Data received from Db:\n');

    var string=JSON.stringify(rows);
    var json =  JSON.parse(string);

    console.log('>> MAX_ID: ', json[0].id);

    let name=getdata(json[0].id);
    return name;
    console.log(">>getdata() : "+name);
   })
}


var MaxId;
async function getdata(MaxId){
var res;

con.query('SELECT * FROM users WHERE user_id = ?',[MaxId],(err,rows)=> 
{
   if(err)throw err;
   var string=JSON.stringify(rows);
   var json =  JSON.parse(string);

   r=json[0].user_first;
   return r;
  })

}

这样就可以了。您可能需要进行一些语法调整。我没有在我的机器上运行它。

您的代码的问题在于您的查询以异步方式返回数据,并且在查询返回数据时,您的函数getData自同步以来已经返回了r。通过使用await,现在只有当两个函数分别返回它们的数据时,才会初始化变量userId和数据(在我的代码中使用)

您可以在此处查看async / await的官方文档 Async/Await