【发布时间】:2021-10-11 02:10:25
【问题描述】:
我的任务是将几个 redshift 表从集群 1 复制到新集群。 为此,我正在 nodejs 中编写一个脚本。 我正在使用 aws-sdk RedshiftData api 来获取数据。 我有两个单独的查询,我想并行运行。以下是我的代码
class syncRedShiftNodes {
constructor(){ ... }
readDataOne(){
let newSqlQuery = `select * from ${this.tableName} limit 10`;
const params = {
ClusterIdentifier: clusterIdentifier,
Sql: newSqlQuery,
Database: database,
DbUser: dbUser
};
return new Promise((resolve, reject)=>{
return awsRedshift.executeStatement(params, function(err, res){
if (err) console.log(err, err.stack); // an error occurred
else{
return awsRedshift.getStatementResult({Id:res.Id}, function(error, data){
if (error) console.log(error, error.stack); // an error occurred
else return data;
});
}
});
});
}
readDataTwo(){ ...//identical to above function except the query }
main(){
return Promise.all([this.readDataOne(), this.readDataTwo()])
.spread((data1, data2)=>{
console.log("promise resolved!!");
return true;
}
}
问题是我的代码从未达到“承诺已解决”日志。如果我在 redshift getStatementResult 的回调中添加日志,则打印正确,但我的句柄从未达到 promise.all().then 语句,我无法理解为什么会这样。
我想到的另一个问题是在类中使用这种模式是一种好习惯吗?
【问题讨论】:
标签: node.js amazon-web-services asynchronous promise amazon-redshift