首页 > 解决方案 > 如何承诺在子类 async-await 方法中使用父类的类方法?

问题描述

我有一个 childClass 并且对 parentClass 的访问权限有限。在其中一个 childClass 方法中,我需要调用 parentClass 方法getToken()getToken()和 parentClass 的其余部分是使用回调编写的。子类是用 promises 和 async-await 编写的。

我知道这很混乱,但这是目前唯一存在问题的地方,这是我们需要做的。

问题示例

...
try {
    // getToken is not promisified yet so it doesn't work
    let tokens = await this.getToken();
    refreshToken = tokens.refresh_token;
}
...

我可以制作自定义的“承诺”功能吗?就像是,

// This isn't correct even if the idea were ok
async promisify(function) {
 return new Promise((resolve, reject) => {
   function((err, data) => {
     if (err) reject(err);
     else resolve(data);
   })
 })
}

然后在我的代码中写:

...
try {
    // getToken is maybe promisified
    let tokens = await this.promisify(this.getToken());
    refreshToken = tokens.refresh_token;
}
...

还是看起来像

const util = require('util');
const asyncGetToken = util.promisify(parentClass.getToken);

...
try {
    let tokens = await asyncGetToken();
    refreshToken = tokens.refresh_token;
}
...

如果是这样,我是否有正确的 childClass 实例可以使用?

我知道这很麻烦,但感谢您提供任何提示。

标签: javascriptnode.jsasync-awaitpromisecallback

解决方案


推荐阅读