如何让我的代码变得漂亮,我必须使用回调来获取db,但我不想使用这种方式
Posted
技术标签:
【中文标题】如何让我的代码变得漂亮,我必须使用回调来获取db,但我不想使用这种方式【英文标题】:How to make my code become beautiful, I have to use callbak to get db, but I don't want to use this way 【发布时间】:2017-04-12 00:52:03 【问题描述】:我做了一个类名 Chocolate,并在里面放了一些 mongodb 函数,所以我需要创建一个连接,并从回调中获取 db,这样我的代码就变得丑陋了
代码:
let chocolate = new Chocolate(url,
db =>
chocolate.insert("en", "h": 1 ).disconnect();
)
课程代码在这里:
class Chocolate
constructor(url, callback)
this.url = url;
this.connect()
.then(db =>
this.db = db;
callback(db);
);
connect(callback)
return MongoClient
.connect(this.url);
disconnect()
this.db.close();
insert(className, dataObject)
const collection = this.db.collection(className);
collection.insert(dataObject)
.then(
result =>
return result.insertedIds;
);
return this;
我知道 orm 可以帮助我,但我不想使用一些 orm。因为我只需要一点功能。
那么,如何让这些代码变得漂亮呢?
或者像这样:
let chocolate - new Chocolate(url);
chocolate.insert(xxxx).find(xxxx).run().disconnect()
【问题讨论】:
【参考方案1】:您可以尝试将这些回调转换为承诺
https://benmccormick.org/2015/12/30/es6-patterns-converting-callbacks-to-promises/
【讨论】:
www,让我看看 converting,enn, 如何让课堂使用promise QAQ【参考方案2】:我不会在构造函数中执行异步代码,而是在实例化对象后调用连接函数。
通常,从构造函数返回不是对象实例的任何内容被认为是不好的做法。
【讨论】:
好的,我试试看:jsfiddle。但我做不到这个。_db = db。我想哭QAQ 哇,这太神奇了。const self = this;
这段代码让我想起了一些老问题:)
好吧,我只是希望它有所帮助!
wuuu,这是一个悲伤的故事,当我使用 console.log(self._db)
时;它会像这样未定义:jsfiddle
好吧,有人说:MongoClient.connect(this.url).then(here is await);
这会让 this._db 变得未定义以上是关于如何让我的代码变得漂亮,我必须使用回调来获取db,但我不想使用这种方式的主要内容,如果未能解决你的问题,请参考以下文章