I am missing something in my understanding of promises so please bear with me.
Currently I have code like:
var sql = require ('mssql');
var ConvertToJSON = function() {
var config = {
server: 'db3dev',
database: 'EForms',
driver: 'msnodesqlv8',
options: {
trustedConnection: true
}
};
return sql.connect(config).then(function(result) {
var formRequest = new sql.Request();
var formQuery = 'select *' +
' from [EForms].[OnlineForm].[FormDefinition]';
return formRequest.query(formQuery).then(function(formRows) {
return Promise.all(formRows.map(function(formRow) {
var pageRequest = new sql.Request();
var pageQuery = 'select *' +
' from [EForms].[OnlineForm].[PageDefinition] pd' +
' where pd.formDefinitionID = ' + formRow.formDefinitionID;
pageRequest.query(pageQuery).then(function(pageRows) {
return Promise.all(pageRows.map(function(pageRow) {
var fieldRequest = new sql.Request();
var fieldQuery = 'select *' +
' from [EForms].[OnlineForm].[FieldDefinition] fd' +
' where fd.pageDefinitionID = ' + pageRow.pageDefinitionID;
fieldRequest.query(fieldQuery).then(function(fieldRows) {
return Promise.all(fieldRows.map(function(fieldRow) {
return fieldRow.fieldKey;
}));
});
}));
});
}));
});
})
}
ConvertToJSON().then(function(result) {
console.log('Success!!');
}).catch(function(err) {
console.log(err);
});
The idea is to return a promise on connection that will only get resolved when all forms, pages, and fields are resolved. But the function 'ConvertToJSON' returns an array of 17 undefined values. Since the inner most query is 'resolving' to a string (fieldKey) I was expecting the result to be an array of strings.
Ideas?
Thank you.