शुभ दिवस। यहाँ एक समारोह है जो मेरे पास है:

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]}`);
    })
})
}

मैं इस फ़ंक्शन के साथ जो हासिल करना चाहता हूं वह यह है कि जब क्लाइंट लॉग ऑन होता है और वेबसेशन भी होता है, तभी वादा हल हो जाता है। इसका कारण यह है कि समय महत्वपूर्ण है।

2
Bob Boby 6 जिंदा 2021, 17:59

2 जवाब

सबसे बढ़िया उत्तर

एक त्वरित समाधान प्रत्येक घटना के लिए 2 बूलियन बनाए रखना होगा और केवल resolve को कॉल करना होगा यदि दोनों सत्य हैं (या, अधिक सटीक रूप से जब अन्य किसी ईवेंट हैंडलर से सत्य है)

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();
    })
})
}
3
Jamiec 6 जिंदा 2021, 18:03

जवाब नहीं, बस सिंटैक्स। आप अपने कोड को हल्का और पढ़ने में आसान बनाने के लिए विनाशकारी का उपयोग कर सकते हैं।


   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();
          }
        });
      });
    }
1
Orelsanpls 6 जिंदा 2021, 18:13