在续集中,我想做一些诸如链接findAll函数调用之类的事情。
我想在像这样的模型上进行一次findAll
const newYorkers = await People.findAll({ where: { city: 'New York' } });
,然后使用newYorkers
作为函数的参数,从而在该函数上进行另一个findAll
const get5ThAvenueInhabitants = (citiesInhabitants) => {
return await citiesInhabitants.findAll({ where: { street: '5th Avenue' } });
};
get5ThAvenueInhabitants(newYorkers);
那是行不通的,因为在第一个findAll之后,结果不再是模型,而是一系列结果。
是否可以通过续集来实现?
答案 0 :(得分:0)
如果您只想找到居住在People
和New York
中的findAll 5th Avenue
,为什么不使用and
运算符?
就像
一样简单
const newYorkers = People.findAll({
where: {
city: 'New York',
street: '5th Avenue',
},
],
},
});
答案 1 :(得分:0)
首先,除了您要询问的内容外,我不了解函数get5ThAvenueInhabitants()
背后的逻辑。作为上一个答案,您可以直接使用where: { city: 'New York', street: '5th Avenue'}
进行过滤。无需先查询“纽约”,再查询“第五大道”。
现在回到您真正询问的内容,关于链接请求,您可以像这样使用async / await:
const mainFunction = async () => {
const newYorkers = await People.findAll({ where: { city: 'New York' } });
get5ThAvenueInhabitants(newYorkers);
}
这样,newYorkers
将等待,直到所有数据都被提取,然后继续进行get5ThAvenueInhabitants()
。
答案 2 :(得分:0)
正如您提到的,People.findAll({ where: { city: 'New York' } });
返回一个instances
而不是model
的数组。 instance
对象确实公开了destroy
,update
等方法,因此,从某种意义上讲,您可以通过在对象上使用这些方法来进行某种查询“链接”。返回的实例,像这样:
People.findAll({ where: { city: 'New York' } }).then(people => {
people.forEach(person => {
person.destroy();
})
});
要过滤应用程序代码中返回的集合(而不是使用数据库查询),可以执行以下操作:
People.findAll({ where: { city: 'New York' } }).then(people => {
people.filter(person => {
if(person.street === '5th Avenue'){
return person;
}
})
});