У меня есть следующая функция:
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
Я попытался изменить все функции на async / await, я попытался вернуть обещание внутри функции map
в bulkPreprocess.Я пробовал обратные вызовы.Ничего не получается.
Любой совет?