【发布时间】:2019-07-28 17:24:44
【问题描述】:
我从 Typescript 开始,但在从同一类的另一个方法调用一个方法时遇到了问题。
读到这个问题,有人说要在方法名称前使用“this”,但在我的情况下它不起作用。
class PlaylistController {
public async create(req: Request, res: Response): Promise<Response> {
let artists = req.body.bands;
artists = artists.split(',');
const search = await Object.values(artists).map(
(artistsName: string): void => this.searchArtists(artistsName),
);
return res.json(search);
}
private searchArtists = (artistName: string): void => {
console.log(artistName);
};
}
export default new PlaylistController();
编辑: 这是我用来调用我的方法的代码:
class App {
public express: express.Application;
public constructor() {
this.express = express();
this.middlewares();
this.routes();
}
private middlewares(): void {
this.express.use(express.json());
}
private routes(): void {
this.express.get('/', (req, res): void => {
res.send('API Rodando...');
});
this.express.post('/createPlaylist', PlaylistController.create);
}
}
export default new App().express;
当我执行这段代码时,方法“searchArtists”没有被调用,我得到了错误:
UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“searchArtists”。 (节点:11941)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:1) (节点:11941)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
所以,我不知道我做错了什么,希望你能帮助我。
【问题讨论】:
-
当你说你执行代码的时候,是不是还有更多的代码没有贴在这里?因为您现在拥有的代码将无能为力。如果是这种情况,请发布调用该方法的代码。
-
@Collierre 谢谢你的回答,我添加了我用来调用我的方法的代码。
-
您如何将
PlaylistController导入您的第二个文件? -
@Collierre 导入没问题,我使用: import PlaylistController from './controllers/PlaylistController';
-
嗯,我不确定。
this应该解析为create方法中的PlaylistController实例。也许问题与this.express.post()方法有关,虽然我不熟悉 Express。
标签: javascript node.js typescript