node js处理异步if-else

时间:2017-06-13 20:38:44

标签: 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字段未定义,而在第二if condition中,id的值变为未定义。但是如果用户已经登录,则这完全可以正常工作,因为没有太多时间进行操作。所以任何人都可以建议我解决上述问题。任何帮助或指导都将受到高度赞赏。

1 个答案:

答案 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
});