请记住,我刚接触 node.js,之前主要从事安卓开发。
我的情况是这样的:
1. 对数据库运行查询,返回 null 或者一个值。 2. 使用数据库中的值调用 web 服务,获取分页信息。每次调用会返回一个参数,以便下一次调用获取更多信息。 3. 获取所有项目后,将它们存储在数据库表中。 4. 如果一切正常,对于先前接收到的每个项目,我需要进行另一个 web 调用,并将检索到的信息存储在另一个表中。 5. 如果任何数据集检索失败,则必须从数据库中还原所有数据。
到目前为止,我尝试了以下方法:
我的情况是这样的:
1. 对数据库运行查询,返回 null 或者一个值。 2. 使用数据库中的值调用 web 服务,获取分页信息。每次调用会返回一个参数,以便下一次调用获取更多信息。 3. 获取所有项目后,将它们存储在数据库表中。 4. 如果一切正常,对于先前接收到的每个项目,我需要进行另一个 web 调用,并将检索到的信息存储在另一个表中。 5. 如果任何数据集检索失败,则必须从数据库中还原所有数据。
到目前为止,我尝试了以下方法:
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()
按顺序执行操作。
t.sequence(index)
中的索引?例如,在每个网络调用中,我都会得到 nextPage 值,但我不明白你如何实际调用getNextData(index)
,因为我没有看到index
被保存或发送到任何地方,因为它可能在每个 getNextData 上更改或为空。 - Alin