如何让我的代码变得漂亮,我必须使用回调来获取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,但我不想使用这种方式的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 eslint 上的错误(更漂亮/更漂亮)?

如何从回调操作的结果中获取类型?

如何让 GUI java 变得漂亮? [关闭]

如何让我的git repo更小

JavaScript函数等待回调返回值[重复]

如何在 DBeaver 中漂亮地格式化我的 SQL 查询?