node.js - Angular 6 API 中的异步调用
问题描述
我在我的 API 文件中执行了以下代码,但我不明白如何管理以下两个异步调用来执行该函数,以便有人可以帮助我解决问题,或者我可以使用 Promise 来解决问题。
在此先感谢您的帮助。
function getDataFromBK() {
connection((db) => {
var comment = "";
db.collection('comment')
.find({
"appNo": appNo
}, {
"filename": fileName
})
.toArray()
.then((filelist) => {
/* response.data = filelist;
res.json(response);*/
comment = filelist[0].comment;
console.log("comment-->" + comment);
return comment;
}).catch((err) => {
console.log("err-->" + err);
return err;
})
});
filepath = path.join(__dirname, '../../uploads/output/' + req.body.appNo) + '/' + req.body.filename[i];
fileInfo.push({
"originalName": req.body.filename[i],
//"size": req.body.filename.size,
"b64": new Buffer(fs.readFileSync(filepath)).toString("base64"),
"comment": comment
});
}
解决方案
由于comment
设置为 inside then
,因此您不能指望它在您正在执行fileInfo.push
的find
操作中可用,因为操作将async
在本质上进行。
尝试像这样重组您的代码:
function getDataFromBK() {
connection((db) => {
var comment = "";
db.collection('comment')
.find({ "appNo": appNo }, { "filename": fileName })
.toArray()
.then(filelist => {
comment = filelist[0].comment;
filepath = path.join(__dirname, '../../uploads/output/' + req.body.appNo) + '/' + req.body.filename[i];
fileInfo.push({
"originalName": req.body.filename[i],
"b64": new Buffer(fs.readFileSync(filepath)).toString("base64"),
"comment": comment
});
})
.catch(err => err)
});
}
推荐阅读
- javascript - 使用Javascript中的正则表达式检查数组中的所有元素是否作为单词存在于字符串中
- java - 如何在 Java 的 DecimalFormat 中使用添加点到货币?
- kotlin - Kotlin 序列化:如何序列化 MutableStateFlow
? - c# - 如果存在行,如何更新行,否则将其添加到数据库中?[实体框架]
- node.js - 如何在sequelize中设置外键
- google-bigquery - 在 MySql 中获取聚合数据
- android - 已创建 Android Recyclerview 行,提供内容,但显示空白
- vba - 如何检查脚本运行时是否可用
- python - 如何在python中用0递归替换所有负值?
- python-3.x - 替换python中的变音符号