如何从ES6中的对象内部的另一个方法调用方法

时间:2015-10-31 11:55:13

标签: node.js

我有一个对象,我需要从同一个对象内的另一个方法调用它的方法。我正在使用ES6语法:

var user = {
login(name, password) {
        return new Promise(function(resolve, reject) {
            console.log('ready to find');
            var args = {
                'name': 'users',
                'query': {
                    'name': name
                },
                'options': {
                    '_id': 1,
                    'name': 1,
                    'password': 1
                }
            };
            db.find(args).toArray().then(function(result) {
                    var auth = {};
                    if(result[0] && result[0].password == password) {
                        console.log('user ok');
                        auth = {
                            ok: 1,
                            userID: result[0]._id,
                            user: result[0].name
                        };
                    } else {
                        console.log('user wrong');
                        auth = {
                            ok: -1,
                            errmsg: 'password wrong'
                        };
                    }
                    resolve(auth);
                })
                .catch(function(err) {
                    reject(err);
                });
        });
    },
    find(userID) {
        console.log("USER: find");
        return new Promise(function(resolve, reject) {
            var args = {
                'name': 'users',
                'query': {
                    '_id': userID
                },
                'options': {
                    'name': 1
                }
            };
            db.find(args).toArray().then(function(result) {
                    var findResult = {};
                    if(result[0]) {
                        findResult.ok = 1;
                        findResult.user = result[0].name;
                    } else {
                        findResult.ok = -1;
                        findResult.errmsg = 'not found';
                    }
                    return findResult;
                })
                .catch(function(err) {
                    throw err;
                });
        });
    },
    authenticate(session) {
        return new Promise(function(resolve, reject) {
            console.log("USER: authenticate");
            if(session.cookie && session.userID && session.user) {
                var _expires = session.cookie._expires;
                var userID = session.userID;
                var user = session.user;
                if(new Date(_expires) > new Date(Date.now())) {
                    console.log("USER: session isn't expired");
        console.log(userID);
                    user.find(userID);
                }
            }
        });
    },

};

我可以在外面拨打user.find(),但无法从user.anthenticate()拨打电话。 console.log("USER: session isn't expired");console.log(userID);效果很好,但console.log("USER: find");没有

1 个答案:

答案 0 :(得分:0)

您的陈述

var user = session.user;

引入了第二个user变量,该变量使用find方法隐藏了该变量。只要省略它,你就不需要它。

var user = {
    login(name, password) {
        console.log('ready to find');
        return db.find({
            'name': 'users',
            'query': {'name': name},
            'options': {'_id': 1, 'name': 1, 'password': 1}
        }).toArray().then(function(result) {
            var auth = {};
            if(result[0] && result[0].password == password) {
                console.log('user ok');
                return {ok: 1, userID: result[0]._id, user: result[0].name};
            } else {
                console.log('user wrong');
                return {ok: -1, errmsg: 'password wrong'};
            }
        });
    },
    find(userID) {
        console.log("USER: find");
        db.find({
            'name': 'users',
            'query': {'_id': userID},
            'options': {'name': 1}
        }).toArray().then(function(result) {
            var findResult = {};
            if(result[0]) {
                return {ok: 1, user: result[0].name};
            } else {
                return {ok: -1, errmsg: 'not found'};
            }
        });
    },
    authenticate(session) {
        console.log("USER: authenticate");
        if(session.cookie && session.userID && session.user) {
            var _expires = session.cookie._expires;
            var userID = session.userID;
            if(new Date(_expires) > new Date(Date.now())) {
                console.log("USER: session isn't expired");
                console.log(userID);
                return user.find(userID);
            }
        }
    });
}