传递变量以确定连接

我正在寻找一种方法,我可以在其中传递诸如存储桶名称之类的值,然后使用它在类中的方法中填充值。我有一个控制器,它是一个建立两个连接的类,一个称为bucket,另一个称为bucket2。两种方法是相同的,除了一个使用bucket另一个bucket2。我想避免创建双重方法并使用变量来决定该方法使用的存储桶。


下面是我的控制器类


const couchbase = require("couchbase")

const config = require("../config/config")


class CouchController {

    constructor() {

        this.cluster = new couchbase.Cluster(config.cluster);

        this.cluster.authenticate(config.userid, config.password)

        this.N1qlQuery = couchbase.N1qlQuery;


        this.bucket = this.cluster.openBucket('Contacts', function(err) {

            if (err) {

                console.error('Got error: %j', err);

            }

        });

        this.bucket2 = this.cluster.openBucket('mail_store', function(err) {

            if (err) {

                console.error('Got error: %j', err);

            }

        });


    }

    getDoc(docID) {

        return new Promise((resolve, reject) => {

            this.bucket.get(docID, (err, result) => {

                if (err) return reject(err);

                return resolve({ docID, result });

            });

        });

    }

    getDoc2(docID) {

        return new Promise((resolve, reject) => {

            this.bucket2.get(docID, (err, result) => {

                if (err) return reject(err);

                return resolve({ docID, result });

            });

        });

    }

}

module.exports = CouchController

我试了一下,想出了一个可行的解决方案,但它并不像我想要的那样干净


getDoc(bucket, docID) {

    if (bucket == "bucket2") {

        bucket = this.bucket2

    } else {

        bucket = this.bucket

    }

    return new Promise((resolve, reject) => {

        bucket.get(docID, (err, result) => {

            if (err) return reject(err);

            return resolve({ docID, result });

        });

    });

}


蝴蝶刀刀
浏览 103回答 2
2回答

小怪兽爱吃肉

我想我会将存储桶对象“映射”到存储桶名称...bucketWithName(name) {    let buckets = { bucket2: this.bucket2, ... others here ...}    return buckets[name] || this.bucket // this.bucket is default}getDoc(bucketName, docID) {    let bucket = this.bucketWithName(bucketName);    return new Promise((resolve, reject) => {        bucket.get(docID, (err, result) => {            if (err) return reject(err);            return resolve({ docID, result });        });    });}

青春有我

一个稍微不同的解决方案是将桶作为参数传递,而不是使用变量来决定使用哪个变量。举个例子:getDoc(bucket, docID) {    return new Promise((resolve, reject) => {        bucket.get(docID, (err, result) => {            if (err) return reject(err);            return resolve({ docID, result });        });    });}this.getDoc(this.bucket, some_id);如果您需要在此上下文中使用bucket 或在此上下文this.getDoc(this.bucket2, some_id);中使用bucket2,请使用它调用它 。我希望它有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript