У меня была проблема с присвоением значений до завершения асинхронного вызова, поэтому я решил использовать Promises (в данном случае: Bluebird). Я думал, что это решит проблему, но, поскольку я совсем не знаком с промисами/или узлом в этом отношении, он все еще делает то же самое.
Как мне изменить мой код ниже, чтобы правильно использовать промисы? И поддерживать поток, чтобы я мог проверить modules
на основе предыдущего row
?
var Promise = require('bluebird');
var db = require('../shared/db');
var queryHelper = require('../shared/queryHelper');
var schemas = require('../schemas/schemas');
var _ = require('lodash');
var serverSettings = require('../shared/coreServerSettings');
// Create new instance of mysql module
var connection = new db();
var queryhelper = new queryHelper();
// Promised methods
var queryAndWait = Promise.promisify(connection.query);
..отрезать..
queryAndWait(query + '; ' + queryFoundRows, params).then(function (result) {
var payload = [];
var site_access = [];
var module_access = [];
_.each(result[0], function (row) {
var sites = row.site_access.split(',');
_.each(sites, function (site_id) {
site_access.push(site_id);
});
row.site_access = site_access;
site_access = [];
queryAndWait(queryModules, [row.priv_id]).then(function (result) {
_.each(result, function (module) {
var modulePriv = {
priv_name: module.priv_name,
priv_num: module.priv_num,
enabled: module.enabled
};
module_access.push(modulePriv);
});
//console.log("am assigning " + JSON.stringify(module_access));
row.module_access = module_access;
module_access = []
});
payload.push(row);
});
});
Чтобы уточнить:
Извините, модули — это группы продуктов, к которым имеют доступ пользователи (строка), которые рассчитываются «на лету» (побитово — следовательно, соединение недоступно и отдельный запрос), запрос модуля возвращает что-то вроде следующего, которое я затем перебираю и прикрепите к строке перед возвратом полезной нагрузки:
[{"priv_name":"INTERACT","priv_num":1,"enabled":1},{"priv_name":"STAFF_ADMIN","priv_num":32,"enabled":1},{"priv_name":"INT_EDIT","priv_num":64,"enabled":0},{"priv_name":"FAILED_LOGIN","priv_num":128,"enabled":0},{"priv_name":"INT_TAGS","priv_num":256,"enabled":0},{"priv_name":"NC","priv_num":512,"enabled":0},{"priv_name":"CC_TIMETABLE_MGR","priv_num":1024,"enabled":0}]
modules
и каков ожидаемый результат? - person thefourtheye   schedule 23.09.2015