【发布时间】:2017-12-07 18:27:18
【问题描述】:
请记住,我是 node.js 的新手,我使用的是 android 开发。
我的场景是这样的:
- 对返回空值或值的数据库运行查询
- 使用该数据库值调用 Web 服务,提供分页信息,这意味着在调用时,如果有更多信息要获取,我会获得一个参数以传递给下一次调用。
- 检索到所有项目后,将它们存储在数据库表中
- 如果一切正常,对于之前收到的每件商品,我需要再次拨打网络电话并将检索到的信息存储在另一个表中
- 如果获取任何数据集失败,则必须从数据库中恢复所有数据
到目前为止,我已经尝试过:
getAllData: function(){
self.getMainWebData(null)
.then(function(result){
//get secondary data for each result row and insert it into database
}
}
getMainWebData: function(nextPage){
return new Promise(function(resolve, reject) {
module.getWebData(nextPage, function(errorReturned, response, values) {
if (errorReturned) {
reject(errorReturned);
}
nextPage = response.nextPageValue;
resolve(values);
})
}).then(function(result) {
//here I need to insert the returned values in database
//there's a new page, so fetch the next set of data
if (nextPage) {
//call again getMainWebData?
self.getMainWebData(nextPage)
}
})
从我测试的结果来看,缺少一些东西,getAllData.then 只为第一组项目触发一个,而不为其他项目触发一个,因此显然处理返回的数据不正确。
后期编辑:我已经编辑了场景。考虑到更多的研究,我的感觉是我可以使用链或.then() 来按顺序执行操作。
【问题讨论】:
-
这里:stackoverflow.com/questions/44783797/… 你可以找到一个使用 pg-promise 异步拉取数据的事务的示例。
-
谢谢@vitaly-t,但由于我是节点新手,我很难理解。我已经将 knex 用于 postgres 插入并且工作正常。在理解之前,我需要更详细地研究您对另一个问题的回答
-
您可能在事务之外使用了 knex。这一次更棘手。您需要一个事务,以便能够回滚更改,并且您需要运行一个无限的异步序列。这就是该示例的作用。
-
@vitaly-t 确实,您说得有道理,好像在获取过程中发生了故障,我需要能够回滚所有更改。你能在这里发布与我的问题相关的答案吗?感谢您抽出宝贵时间回复我。
-
最好阅读以下内容:github.com/vitaly-t/pg-promise/wiki/Data-Imports。在这里重新发布它太多了。
标签: node.js promise pg-promise