Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js处理异步if-else_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 节点js处理异步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-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语句不需要执行异步操作,您仍然会异步返回值,以便调用方始终以相同的方式获取响应,而不管如何检索响应。承诺对这一点很重要

这是一个典型的函数,它通过返回与值解析的承诺来设计异步结果,从而处理同步结果或异步结果

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-这回答了你的问题吗?