我正在执行一个用nodeJS编写的云函数,这里函数会在外部数据输入时触发,在这个函数中,我必须在特定的表上调用并检查DB,但它需要5个以上的时间在执行getDataFromDb
函数之前几秒钟,我的主要函数完成了执行。另外,还有一个名为updateItems(postdate);
的函数,如果在触发getDataFromDb
我尝试了异步等待,但是我不确定自己在哪里做错了。在我的数据库操作结束之前,我的功能总是先结束。
exports.handler = (event, context) => {
//here i am making data ready for DB and checking for the record if that is present in db
getDataFromDb(uniqueArray);
function getDataFromDb(uniqueArray) {
var params = {
// params for get reques
}
//db get operation
db.get(params, function (err, data) {
//takes time here
if (err) {
console.log(err); // an error occurred
}
else {
//another DB operation updateItems(postdata);
//takes time here
}
else {
console.log("first run for db")
//another DB operation updateItems(postdata);
//takes time here
}
}
});
}
});
console.log("main function ended")
};
预期结果应等待内部函数执行然后结束主函数,但实际上,主函数先结束然后DB调用函数结束
答案 0 :(得分:0)
尽管这可以通过回调实现,但将其转换为Promise链很容易,因为内部函数的执行取决于外部函数,所以最好将链式Promise链在一起,即在第一个函数的回调中返回Promise,以依次执行它们
exports.handler = (event, context) => {
getDataFromDb(uniqueArray).then(success => {
console.log('Done')
})
.catch(err => {
console.log('handle get or post err here');
});
function getDataFromDb(uniqueArray) {
var params = {};
return new Promise((resolve, reject) => {
db.get(params, (err, data) => {
if (err) {
return reject(err); // an error occurred
} else {
return resolve(data);
}
});
}).then(success => updateItems(data))
}
});