我具有以下功能:
const bulkPreprocess = (files) => {
let bulkOps = []
files.map(doc => {
parse(doc).then(content => {
const sent = sentiment(content)
bulkOps.push(sentiment)
bulkOps.push({anotherobject})
})
})
return bulkOps
}
像这样的主函数调用哪个:
module.exports = (req, res) => {
//parses post request with file uploads
const form = new multiparty.Form()
form.parse(req, (err, fields, allFiles) => {
//called more than once
const files = allFiles['files']
let processed = bulkPreprocess(files).then(bulk => {
console.log(bulk.length)
addToES(bulk)
})
})
res.json({ success: true })
}
我的问题是,由于bulkPreprocess调用了parse
函数(它是异步的),所以我无法等待直到解析所有文件之后再调用addToES
。解析函数本身调用了另一个异步函数(这就是为什么我必须使其异步)的原因。
整个流程是这样的:
Main -> bulkPreprocess -> (Parse -> parseDoc) -> return value from bulkPre -> addToES
我尝试将所有功能更改为异步/等待,我尝试在bulkPreprocess的map
函数内部返回一个Promise。我尝试了回调。什么都没有解决。
有什么建议吗?
答案 0 :(得分:3)
您需要从Promise
返回bulkPreprocess
,它会在您的异步parse
之后解析,因此您需要Promise.all
等待所有parse
的通话结束>
编辑:
现在,在完成所有bulkOps
之后,它将对象一起推入resolve
和parse
const bulkPreprocess = (files) => {
let bulkOps = [];
return Promise.all(files.map(doc => {
return parse(doc).then(content => {
const sent = sentiment(content);
bulkOps.push(sentiment);
bulkOps.push({anotherobject});
});
})).then(() => bulkOps);
};