【问题标题】:es2016 handling callbacks in class constructor [duplicate]es2016在类构造函数中处理回调[重复]
【发布时间】:2020-03-25 03:11:51
【问题描述】:

我正在尝试将以下代码写入 es2015 类语法:

export function initialize(port) {
    return new Promise((resolve, reject) => {
        const application = express();
        const server = application.listen(port, function listening(error) {
            if (error) reject(error);
            resolve(server);
        });
    });
}
const server = async initialize(port);

es2015:

class Server {
    constructor(port) {
        return new Promise((resolve, reject) => {
            const application = express();
            const server = application.listen(port, function listening(error) {
                if (error) reject(error);
                resolve(server);
            });
        });
    }
}
const server = async new Server(port); // <-- not a good idea!

在使用应该返回即时实例的new 时,显然返回和Promise 并不是一个好主意。有什么想法吗?

【问题讨论】:

  • 你的意思是await 而不是asyncconst server = 之后?
  • "我正在尝试将以下代码写入 es2015 类语法" - 为什么?这样做没有意义。它甚至不像你注意到的那样工作。 function 要简单得多。你的目标是什么?

标签: javascript ecmascript-6


【解决方案1】:

您可以使用单独的 initialise 方法并从实例中调用它:

class Server {
  constructor(port) {
    this.port = port;
  }

  initialise() {
    return new Promise((resolve, reject) => {
      const application = express();
      const server = application.listen(this.port, function listening(error) {
        if (error) reject(error);
        resolve(server);
      });
    });
  }
}
const server = new Server(port);
server.initialise().then(() => // do some stuff)

【讨论】:

  • 这样做有什么好处?你不能通过第二次左右调用initialise() 来重复使用serverInstance
  • 这样可以避免在构造函数中创建一个promise。
  • 当然,我的意思是它甚至是一个很好的解决方案,但是使用 class Server 与原始代码相比有什么优势?
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
相关资源
最近更新 更多