我试图从函数let survey = Survey(id: 0, name: "First survey", questions: [
Question(id: survey.id, text: "Whats your name", survey: survey) // This is not possible.
])
返回值,但它不起作用。
代码
getdata
答案 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