承诺的执行顺序 [英] Execution order of Promises

查看:82
本文介绍了承诺的执行顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在下面有许诺。通过查看记录器语句,我希望控制台显示:

I have the chain of promises below. By looking at the logger statements, I would expect the console to show:


’2。腾出空间,‘3。自发会话, 3A。获得
自发会话, 4。附加到会议, 4A。附加到
会议上,

'2. Getting room', '3. Getting spontaneous session', '3A. Getting spontaneous session', '4. Attaching to meeting', '4A. Attached to meeting',

但是我却得到:


'2。腾出空间,‘3。自发会话, 3A。获得
自发会话, 4A。附加到会议上,‘4。附加到
会议上,

'2. Getting room', '3. Getting spontaneous session', '3A. Getting spontaneous session', '4A. Attached to meeting', '4. Attaching to meeting',

有人可以解释为什么第三个 then在返回之前没有被击中

Can someone explain why the third 'then' is being hit before anything is returned from the second 'then'?

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();
    });
});


推荐答案

您没有返回以下提供的承诺:

You are not returning the promise returned by:

connectTokboxZip()

这使包含的 then()返回的是不确定的而不是承诺。看起来应该像这样:

This makes the containing then() return undefined instead of a promise. It should look like:

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);
    }
}).

这篇关于承诺的执行顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆