ara*_*y12 0 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;
Run Code Online (Sandbox Code Playgroud)
这不起作用
/**
* 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;
Run Code Online (Sandbox Code Playgroud)
我也尝试在curling括号中包含对模型的调用并显式返回它们.这不是一个重要的优先事项,因为我有一个解决方法,但我希望更好地了解最新的功能.谢谢.
Promise.join期待一个或多个承诺,而不是功能.
Promise.join(getTableOne(), ...)
Run Code Online (Sandbox Code Playgroud)
调用 getTableOne并传递返回值,一个promise Promise.join.
但
Promise.join(() => models.table_one.findAll(), ...)
Run Code Online (Sandbox Code Playgroud)
将函数本身传递给Promise.join,而不是承诺.它并没有调用该函数.
这里不需要箭头功能:
Promise.join(models.table_one.findAll(), ...)
Run Code Online (Sandbox Code Playgroud)