2017-05-27 80 views
1

你好,我想与有选择返回一个简单的布尔: - 真:用户存在于数据库 - 假:用户不存在于数据库返回值

这里是我的非工作代码:

database.users.get("test-username", function (err, value) { 
    if (err) { 
     return err; 
    } else { 
     return value; 
    } 
}) 

回报始终是undefined 我知道,是的NodeJS设计工作异步,但异步函数不允许我回去的东西。我卡住了,请帮忙!

此外,我使用LevelUP作为数据库系统。 (如果我的问题没有解决方案,NodeJS中是否有其他数据库系统允许同步?)

感谢社区!

回答

1

当你console.log你的回报? 例如:

function dbCall(){  
database.users.get("test-username",function(err, value){ 
    if(err){ 
      return false; 
    }else{ 
     console.log(value); 
     return value; 
    } 
} 
} 

,如果你得到一些有价值的东西,那么你看不到任何回报的原因是因为API调用是异步的。你必须承诺。

new Promise(resolve,reject){ 
    let data = dbCall(); 
    if(data == false) 
     reject(data); 
    else 
     resolve(data); 
} 
+0

当然,console.log在回调中工作,在回调之外没有任何工作。 我发现了另一个解决方案,是用'req'和'res'参数(ExpressJS)调用函数,所以我可以在回调中直接用'res.send(response)'显示响应 –

+0

它不起作用的原因是因为在继续之前,您的程序不会等待异步调用回调。但是,请求和资源也应该工作:) 但是,你需要做更复杂的操作使用数据,我强烈建议你看看承诺和异步js库。 – Leon

+0

是的,我终于用Promise 感谢您的帮助! –