gpt4 book ai didi

javascript - 如何使用 Promise 发送对象数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:48 25 4
gpt4 key购买 nike

我已经尝试了很多,但没有得到任何对我有用的东西。我尝试使用promise.all并全局设置数组,但没有成功。

我想在 MongoDB 上搜索三个集合,当找到匹配时,使用信息设置一个对象并将其推送到数组。最后,发送带有对象数组的响应。

router.post('/certificado', (req, res) => {
let cpf = splita(req.body.cpf)
let array = []

function pesquisaProjeto(cpf) {
return new Promise(function (fulfill, reject) {
ProjetoSchema.find({'integrantes.cpf':cpf}, 'integrantes.$ nomeProjeto -_id',(err, usr) => {
if (err) return reject(err)
fulfill(usr)
});
})
}

function pesquisaAvaliador(cpf) {
return new Promise(function (fulfill, reject) {
avaliadorSchema.find({'cpf':cpf}, 'nome -_id',(err, usr) => {
if (err) return reject(err)
fulfill(usr)
})
})
}

function pesquisaParticipante(cpf) {
return new Promise(function (fulfill, reject) {
participanteSchema.find({'cpf':cpf}, 'nome eventos -_id', (err, usr) => {
if (err) return reject(err)
fulfill(usr)
})
})
}

pesquisaProjeto(cpf)
.then(usr => {
let participante = ({
tipo: usr[0].integrantes[0].tipo,
nome: usr[0].integrantes[0].nome
})
array.push(participante)
console.log(participante)
})
.catch(err => console.log("Não encontrou nada nos projetos. " + err.message))

pesquisaAvaliador(cpf)
.then(usr => {
let participante = {
tipo: "Avaliador",
nome: usr[0].nome
}
array.push(participante)
console.log(array)
})
.catch(err => console.log("Não encontrou nada nos avaliadores. " + err.message))

pesquisaParticipante(cpf)
.then(usr => {
let participante = ({
tipo: "Participante",
nome: usr[0].nome,
eventos: usr[0].eventos
})
array.push(participante)
console.log(array)
})
.catch(err => console.log("Não encontrou nada nos participantes dos eventos. " + err.message))

**Anything like res.send(array) that I was tired to try**
});

很抱歉这个愚蠢的疑问,但我花了很多时间试图找到解决方案,因此我决定求助于社区。

谢谢!

最佳答案

如果我理解你的问题是正确的,你有多个 promise 并希望等待所有 promise 完成。您可以使用 Promise.all() 来做到这一点。

如果一个 Promise 失败,Promise.all() 也会失败。但是,如果您像在示例中那样捕获它们并且不返回任何内容,我认为应该为该查询填充未定义的数组。因此,如果您愿意,您可以过滤掉这些空值。

const one = dbQueryOne.then(usr => ({
key: usr.val
}))
.catch(err => { console.log(err) })

const two = dbQueryTwo.then(usr => ({
key: usr.val
}))
.catch(err => { console.log(err) })

const three = dbQueryThree.then(usr => ({
key: usr.val
}))
.catch(err => { console.log(err) })

Promise.all([one, two, three]).then(arr => {
res.send(arr.filter(val => val !== undefined ))
})

usr => ({ key: val }) 只是 usr => { return { key: val } }

的缩写

关于javascript - 如何使用 Promise 发送对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40726027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com