Я новичок в nodejs и обещаниях.Это код, который я написал, прочитав некоторые статьи, но я чувствую, что не на верном пути.
Проблема: - В getManager () иногда neo4j db выдает ошибку во время выполнения запроса, поэтому элемент управления оказывается в блоке catch.Однако обещание так или иначе не будет решено после этого.Поэтому я не уверен, нужно ли мне вызывать deferred.reject (returnResults) в блоке catch.
1) Диалог BOT. Потребитель: вызов getPersonInfo ()
helper.getPersonInfo(personFullName)
.then(function(results) {
if (results && results.length >= 1) {
//Do something.
} else {
//Do something.
}
})
.catch(function(error) {
//Do something
});
2) как getPersonInfo () выглядит:
getPersonInfo: function(fullname) {
return Promise.all([
personService.getManager(firstname, fullname, operatorId),
personService.getTeamsMates(firstname, fullname, operatorId)
]);
}
3) Как выглядит один из методов метода promise.all (): -
var Q = require('q')
getManager: function(fullname) {
let session = graphDBDriver.session();
let deferred = Q.defer();
let query = function() {
let returnResults = [];
if (fullname) {
let cypherQuery = "Neo4j Query"
session
.run(cypherQuery, { fullname: fullname })
.then(function(result) {
result.records.forEach(function(record) {
if (record && record.length >= 1) {
returnResults.push(record);
}
});
return deferred.resolve(returnResults);
session.close();
})
.catch(function(error) {
session.close();
console.log(" Neo4j error from getManager: " + error);
});
} else {
return deferred.reject(returnResults);
}
}
query();
return deferred.promise;
}
Вопросы: -
1) Является ли хорошей практикой deferred.reject (returnResults) в блоке catch метода getManager ()?
2) Любые другие изменения шаблона или кода, которые я должен выполнить в соответствии с рекомендациями?.