2017-10-03 1 views
0

J'ai la chaîne de promesses ci-dessous. En examinant les instructions du consignateur, je m'attendrais à ce que la console affiche:ordre d'exécution des promesses

'2. Obtenir de la place ',' 3. Obtenir une session spontanée ',' 3A. Obtenir session spontanée ',' 4. Attacher à la réunion ',' 4A. Attaché à réunion '

Mais au lieu que je reçois:

' 2. Obtenir de la place ',' 3. Obtenir une session spontanée ',' 3A. Obtenir session spontanée ',' 4A. Attaché à la réunion ',' 4. Fixation à réunion »,

Quelqu'un peut-il expliquer pourquoi le troisième « puis » est frappé avant tout est retourné à la seconde « puis »?

logger.log('2. Getting room', 2, room); 
RoomStore.getRoom(room, function(err, sessionIds) { 
    let user = req.body.user; 

    logger.log('2A. Getting room', 2, room); 
    logger.log('3. Getting spontaneous session', 2, room); 
    getSpontaneousZipdxSession(user, room). 
    then(function(urls) { 
     resolvedUrls = urls; 
     logger.log('3A. Getting spontaneous session', 2, room); 
     return connectTokboxZip(urls.url, sessionIds[0], room); 
    }). 
    then(function() { 
     if (req.body.translated === 'true') { 
      connectTokboxZip(resolvedUrls.englishSessionUrl, sessionIds[1], room).then(function() { 
       logger.log('4. Attaching to meeting', 2, room); 
       return attachToMeeting(user, room); 
      }); 
     } 
     else { 
      logger.log('4. Attaching to meeting', 2, room); 
      return attachToMeeting(user, room); 
     } 
    }). 
    then(function() { 
     logger.log('4A. Attached to meeting', 2, room); 
     logger.log('Connecting room to zipdx SUCCESS!', 2, room); 
     communications.sendZipDxConnectedMessage(room); 
     resp.sendStatus(200); 
    }). 
    catch(function(error) { 
     logger.log('Connecting room to zipdx failed: ' + error, 2, room); 
     resp.statusMessage = error; 
     resp.status(500).end(); 
    }); 
}); 
+1

Lorsque vous demandez de l'aide, en particulier avec quelque chose comme ceci, s'il vous plaît prendre le temps de formater et indenter le code de manière cohérente et lisible. Je l'ai arrangé pour vous à cette occasion. –

+1

Um ... vous ne voyez pas "2A" à tout moment? –

+0

Merci, je l'ai eu du mal à coller dans réel et le formatage cette fois-ci pour une raison quelconque. Désolé, oui je vois 2A. C'est 4 et 4A qui viennent dans un ordre inattendu. –

Répondre

3

Vous ne remettons pas la promesse retournée par:

connectTokboxZip() 

Cela rend le then() retour contenant non défini au lieu d'une promesse. Cela devrait ressembler à:

then(function() { 
    if (req.body.translated === 'true') { 
     return connectTokboxZip(resolvedUrls.englishSessionUrl, sessionIds[1], room).then(function() { 
      logger.log('4. Attaching to meeting', 2, room); 
      return attachToMeeting(user, room); 
     }); 
    } 
    else { 
     logger.log('4. Attaching to meeting', 2, room); 
     return attachToMeeting(user, room); 
    } 
}). 
+0

Parfait travail maintenant, merci.! –