Promise.join不使用箭头功能

时间:2015-10-21 23:04:40

标签: javascript node.js bluebird

我一直在处理一个返回几个数据库表的所有值的函数。我正在尝试主动采用稳定的es6功能,这似乎是箭头功能的好机会。我使用蓝鸟作为承诺和续集作为我的ORM(它返回蓝鸟承诺的数据库查询)

/**
 * This does not work on node v4.2.0
 */
'use strict';

const Promise = require('bluebird');
const models = require('../database');

const resource = {
    browse: function browse() {
        return Promise.join(
            () => models.table_one.findAll(),
            () => models.table_two.findAll(),
            () => models.table_three.findAll(),
            function(table_one, table_two, table_three) {
                const response = {
                    table_one,
                    table_two,
                    table_three,
                };

                return response;
            });
    },
};

module.exports = resource;

这不起作用

/**
 * But this does
 */
'use strict';

const Promise = require('bluebird');
const models = require('../database');

const resource = {
    browse: function browse() {
        function getTableOne() {
            return models.table_one.findAll();
        }

        function getTableTwo() {
            return models.table_two.findAll();
        }

        function getTableThree() {
            return models.table_three.findAll();
        }
        return Promise.join(
                getTableOne(),
                getTableTwo(),
                getTableThree(),
                function(table_one, table_two, table_three) {
                    const response = {
                        table_one,
                        table_two,
                        table_three,
                    };

                    return response;
                });
    },
};

module.exports = resource;

我还尝试在curling括号中包含对模型的调用并显式返回它们。由于我有一个解决办法,这不是一个重要的优先事项,但我希望能够更好地理解最新的功能。感谢。

1 个答案:

答案 0 :(得分:5)

Promise.join需要一个或多个承诺,而非功能。

Promise.join(getTableOne(), ...)

调用 getTableOne并将返回值(承诺)传递给Promise.join

但是

Promise.join(() => models.table_one.findAll(), ...)

将函数本身传递给Promise.join而不是一个承诺。它调用该函数。

这里不需要箭头功能:

Promise.join(models.table_one.findAll(), ...)