Javascript 节点js处理异步if-else
我正在运行If-else代码块,如下所示:Javascript 节点js处理异步if-else,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在运行If-else代码块,如下所示: if (condition){ var id = data1.id ; } else var id = data2.id ; 我将此id用于其他操作,如下所示: if (id==some value){ do something ; } 当用户注册到应用程序时,或者如果已经登录的用户想要查看某个页面,则执行上述操作。由于node.js是异步的,当用户注册并将结果存储在数据库中时,id字段未定义,在2ndif条件下,id的值变为未
if (condition){
var id = data1.id ;
}
else
var id = data2.id ;
我将此id用于其他操作,如下所示:
if (id==some value){
do something ;
}
当用户注册到应用程序时,或者如果已经登录的用户想要查看某个页面,则执行上述操作。由于node.js是异步的,当用户注册并将结果存储在数据库中时,id字段未定义,在2ndif条件下,id的值变为未定义。但是,如果用户已经登录,这将非常有效,因为没有太多耗时的操作。那么,有谁能给我建议一些解决上述问题的方法吗。非常感谢您提供的任何帮助或指导。如果函数的任何部分或语句是异步的,那么您需要将整个函数设计为异步的,并通过回调或返回的承诺返回结果。然后,即使if语句不需要执行异步操作,您仍然会异步返回值,以便调用方始终以相同的方式获取响应,而不管如何检索响应。承诺对这一点很重要 这是一个典型的函数,它通过返回与值解析的承诺来设计异步结果,从而处理同步结果或异步结果
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
});
可能是回电话。可能是重复的声音,听起来你需要在设置id的函数的回调中进行第二次检查。@scrpaingnoob-这回答了你的问题吗?