日安。这里是我有的一个函数:
function LoginClient(user) {
return new Promise((resolve, reject) => {
SteamClients[user.username].client.logOn({
accountName: SteamClients[user.username].details.username,
password: SteamClients[user.username].details.password,
twoFactorCode: SteamTotp.generateAuthCode(SteamClients[user.username].details.shared_secret)
})
SteamClients[user.username].client.on('loggedOn', ()=> {
Debug.emit('message', `Client logged in: ${SteamClients[user.username]}`);
})
SteamClients[user.username].client.on('webSession', (sid, cookies)=> {
manager.setCookies(cookies);
community.setCookies(cookies);
Debug.emit('message', `Client logged into websession: ${SteamClients[user.username]}`);
})
})
}
我想用这个功能实现的是,当客户机登录并且websession也登录时,只有此时才解决承诺。之所以如此,是因为时机很重要。
一个快速的解决方案是为每个事件维护2个布尔值,并且只有当两者都为真时(或者更准确地说,当另一个从事件处理程序中为真时)才调用
function LoginClient(user) {
return new Promise((resolve, reject) => {
SteamClients[user.username].client.logOn({
accountName: SteamClients[user.username].details.username,
password: SteamClients[user.username].details.password,
twoFactorCode: SteamTotp.generateAuthCode(SteamClients[user.username].details.shared_secret)
})
var isLoggedOn = false;
var hasWebSession = false;
SteamClients[user.username].client.on('loggedOn', ()=> {
Debug.emit('message', `Client logged in: ${SteamClients[user.username]}`);
isLoggedOn = true;
if(hasWebSession) resolve();
})
SteamClients[user.username].client.on('webSession', (sid, cookies)=> {
manager.setCookies(cookies);
community.setCookies(cookies);
Debug.emit('message', `Client logged into websession: ${SteamClients[user.username]}`);
hasWebSession = true;
if(isLoggedOn) resolve();
})
})
}
不是答案,只是语法。您可以使用析构来使您的代码更轻,更容易阅读。
function LoginClient(user) {
return new Promise((resolve, reject) => {
const {
client,
details: {
username,
password,
shared_secret,
},
} = SteamClients[user.username];
client.logOn({
accountName: username,
twoFactorCode: SteamTotp.generateAuthCode(shared_secret),
password,
});
let isLoggedOn = false;
let hasWebSession = false;
client.on('loggedOn', () => {
Debug.emit(
'message',
`Client logged in: ${SteamClients[user.username]}`,
);
isLoggedOn = true;
if (hasWebSession) {
resolve();
}
});
client.on('webSession', (sid, cookies) => {
manager.setCookies(cookies);
community.setCookies(cookies);
Debug.emit(
'message',
`Client logged into websession: ${SteamClients[user.username]}`,
);
hasWebSession = true;
if (isLoggedOn) {
resolve();
}
});
});
}