我在Promises中是个新手,不要一时不解。我想从数据库表中获取数据,对其进行加密并使用新数据更新表。我为此编写了方法:
function getUpdatedEncryptedData(total_records_count, field_name, field_name_new, additional_key) {
var limit = 1000;
var iterations = Math.ceil(total_records_count / limit);
var promises = [];
for (let i = 0; i < 1; i++) {
var deferred = q.defer();
promises.push(deferred.promise);
dataForUpdate().then(function (result) {
encryptData(result, field_name, field_name_new, additional_key).then(function (result) {
deferred.resolve();
}).catch(function (err) {
console.log(err);
});
}).catch(function (err) {
console.log(err);
});
};
console.log(promises);
return q.all(promises);
}
并从此处运行它
function run() {
getTotalRecordsCount(params.db_table_name).then(function (result) {
var total_records_count = result.total;
return getUpdatedEncryptedData(total_records_count, params.field_name, params.field_name_new, params.additional_key).then(function () {
console.log('All data encrypted');
var end = new Date().getTime();
var time = end - start;
console.log('Execution time: ' + time);
}).catch(function (err) {
console.log(err);
});
})
}
我想知道最终的操作时间,但是当我仅设置一次迭代时,一切正常,我可以看到一条消息“所有数据都已加密”,但是当我设置2次以上时,我看不到信息。也许我做错了什么,而我的循环并没有结束?当我设置2种信号时,console.log
方法将返回[ { state: 'pending' }, { state: 'pending' } ]
。我不明白为什么不调用“ then”回调。