我正在运行if-else
代码块,如下所示:
if (condition){
var id = data1.id ;
}
else
var id = data2.id ;
我将id
用于其他操作:
if (id==some value){
do something ;
}
当用户注册到应用程序或者已经登录的用户想要查看某个页面时,执行上述操作。由于node.js是异步的,当用户注册并且结果存储在数据库中时,id
字段未定义,而在第二if condition
中,id
的值变为未定义。但是如果用户已经登录,则这完全可以正常工作,因为没有太多时间进行操作。所以任何人都可以建议我解决上述问题。任何帮助或指导都将受到高度赞赏。
答案 0 :(得分:0)
如果函数或if
语句的任何部分是异步的,那么您需要将整个函数设计为异步并通过回调或返回的promise返回结果。然后,即使if
语句不需要异步执行某些操作,您仍然会异步返回该值,因此无论检索方式如何,调用方始终以相同的方式获取响应。承诺对此很有帮助。
这是一个典型的函数,通过返回一个使用该值解析的promise来设计异步结果,从而处理同步结果或异步结果。
let cache = {};
function getValue(key) {
// check cache to see if we already have the value
let val = cache[key];
if (val !== undefined) {
// already have value, return promise that resolves with this value
return Promise.resolve(val);
} else {
return new Promise(function(resolve, reject) {
db.getValue(key, function(err, val) {
if (err) {
reject(err);
} else {
// save value in cache
cache[key] = val;
resolve(val);
}
});
});
}
}
getValue(someKey).then(function(val) {
// use val here whether it was in the cache or not
}).catch(function(err) {
// handle error here
});