为了账号安全,请及时绑定邮箱和手机立即绑定

传递变量以确定连接

传递变量以确定连接

蝴蝶刀刀 2021-06-21 16:09:44
我正在寻找一种方法,我可以在其中传递诸如存储桶名称之类的值,然后使用它在类中的方法中填充值。我有一个控制器,它是一个建立两个连接的类,一个称为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 });        });    });}
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我想我会将存储桶对象“映射”到存储桶名称...


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

        });

    });

}


查看完整回答
反对 回复 2021-06-24
?
青春有我

TA贡献1784条经验 获得超8个赞

一个稍微不同的解决方案是将桶作为参数传递,而不是使用变量来决定使用哪个变量。举个例子:


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,请使用它调用它 。


我希望它有帮助!


查看完整回答
反对 回复 2021-06-24
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信