我有一个应用程序,其中我有一个Client
类,当我在discord上收到一条消息时,需要为每个用户执行不同的配置(它是一个有自己的API调用的聊天应用程序检查新消息等)。每当我收到带有该用户新配置的新消息时,我都初始化了obj构造函数,但问题是当我同时收到多条消息时,只有最新用户的配置用于创建的所有客户端对象。从应用程序附加示例代码:
等待消息代码:
const app = require("./Client")
const app2 = require("./MyObject")
bot.on('message', async (message) => {
let msg = message.content.toUpperCase(), pg;
let client = await new app2.MyObject();
//set all such configurations
config.a = "valuea";
// initialize my
pg = await new app.Client(config, client);
let result = await pg.Main(bot, message, params).then((result) => {
// Do stuff with result here
});
});
客户端类:
class Client {
constructor(config, client) {
this.config = config;
this.client = client;
}
async Main(bot, message, params) {
let result = {};
this.client.setProperty1("prop");
await this.client.doSOmething();
result = await this.doSOmethingMore(message);
this.client.doCleanUp();
return result;
}
}
我还试过在Client类中初始化obj构造函数,但即便如此也因为某些原因而失败。
任何建议我如何更正我的代码?
答案 0 :(得分:2)
您无需同时使用.then
和await
。
bot.on('message', async (message) => {
let msg = message.content.toUpperCase();
let client = await new MyObject();
//set all such configurations
config.a = "valuea";
// initialize my
pg = new app.Client(config, client);
let result = await pg.Main(bot, message, params);
// Do stuff with result here
console.log(result);
});
(您不需要在构造函数调用时使用await
,因为它不是异步方法)
注意:async-await
适用于比7.6更高版本的节点
如果您想使用.then
:
bot.on('message', (message) => {
let msg = message.content.toUpperCase();
new MyObject().then(client => {
//set all such configurations
config.a = "valuea";
// initialize my
pg = new app.Client(config, client);
pg.Main(bot, message, params).then(result => {
// Do stuff with result here
console.log(result);
});
});
});
答案 1 :(得分:2)
很难确定,因为您不包含MyObject
代码,但通常是it's a bad practice to return a promise from a constructor。
此外,如果你做得不对,那么任何承诺解决的事实上可能并不是你的调用代码所期望的客户端。