Javascript 承诺链内的返回值为';我没接到电话

Javascript 承诺链内的返回值为';我没接到电话,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我使用的是promise库Bluebird,目前我遇到了一个问题,即函数中的所有内容都运行良好,但当我尝试返回值时,函数反而返回未定义的 这就是承诺链: function foo() { createGroupMembers(parsedChat).then(function(val) { var members = val; createMessages(parsedChat, maxPages).then(function(val) {

我使用的是promise库Bluebird,目前我遇到了一个问题,即函数中的所有内容都运行良好,但当我尝试返回值时,函数反而返回
未定义的

这就是承诺链:

function foo() {
    createGroupMembers(parsedChat).then(function(val) {
        var members = val;

        createMessages(parsedChat, maxPages).then(function(val) {
            var messages = val;

            Promise.all([ createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)])
            .then(function (results) {
                var front = results[0];
                var stats = results[1];
                var backcover = results[2];

                var book = head + front + stats + members + messages + backcover;

                console.log('pages in this book: ', pages);
                console.log(book); // logs perfect values.

                return book; 
            }); 

       });

    });
}
问题很简单:当调用
foo()
时,它的值变为
undefined
,而不是book。为什么我会有这种行为

function foo() {
    return createGroupMembers(parsedChat).then(function(val) {
        var members = val;

        return createMessages(parsedChat, maxPages).then(function(val) {
            var messages = val;

            return Promise.all([createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)])
                .then(function(results) {
                    var front = results[0];
                    var stats = results[1];
                    var backcover = results[2];

                    var book = head + front + stats + members + messages + backcover;

                    console.log('pages in this book: ', pages);
                    console.log(book); // logs perfect values.

                    return book;
                });

        });

    });
}
现在,foo将返回一个承诺,该承诺可以解决账面价值问题

foo().then(function(book) {
    console.log('huzzah I have book ' + book);
});
老实说,
foo
可以重写,但这是一个完全不同的问题

仅供参考:你可以为福做类似的事情

function foo() {
    return createGroupMembers(parsedChat)
    .then(function(members) { // members
        return Promise.all([members, createMessages(parsedChat, maxPages)]);
    })
    .then(function(members_messages) {  // membersMessages
        return Promise.all([createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat)].concat(members_messages, [createBackCover(parsedChat)]));
    })
    .then(function(results) { // front, stats, members, messages, back
        var book = head + results.join('');

        console.log('pages in this book: ', pages);
        console.log(book); // logs perfect values.

        return book;
    });
}
第二个(是你唯一的)承诺中的顺序混乱了。所有,并添加了前一个承诺结果,使零件的最终关联像
一样简单。join
-这样做也会正确传播任何错误,因此你对foo的使用可以

foo().then(function(book) {
    console.log('huzzah I have book ' + book);
}).catch(function(err) {
    // handle any and all errors here
});

foo在allI没有返回任何东西我不熟悉Bluebird,但我使用了本地JS承诺。话虽如此。。。匿名函数
函数(结果)
返回book。上面的两个匿名函数
function(val)
不返回任何内容<代码>foo最终不会返回任何内容。您需要返回所有嵌套函数。createGroupMembers、createMessages等@JaromandaX如何使其返回任何内容,为什么不返回?