【发布时间】:2018-11-18 22:04:59
【问题描述】:
我是 nodejs 和 promises 的新手。这是我通过阅读一些文章编写的代码,但我觉得我没有走上正确的道路。
问题:- 在 getManager() 中,有时 neo4j db 在运行查询时会抛出错误,因此控制最终会出现在 catch 块中。然而,不知何故,在那之后承诺将不会得到解决。所以我不确定我是否需要打电话 在 catch 块中的 deferred.reject(returnResults)。
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) 在 getManager() 的 catch 块中使用 deferred.reject(returnResults) 是个好习惯吗?
2)我应该根据最佳实践进行任何其他模式或代码更改吗?
【问题讨论】:
-
在来自 neo 的捕获中,只需重复您的拒绝传递 'error.message'
标签: node.js promise q deferred