节点js中的子查询结果?"/>
如何等待节点js中的子查询结果?
我正在将Graphql与mongoDb一起使用。在解析器中使用了子查询,但是在执行子查询时,主查询返回的数据不会等到子查询完成。我想使用解析器中的子查询参数对主查询执行操作。
return await Articles.find({ Status: 1, isPublish : true })
.sort({TotalClapCount:-1})
.sort({ViewCount:-1})
.skip( offset )
.limit(limit)
.then( async ( lor ) => { await
lor.forEach(async function(data, key){
data["isBookmark"] =
await ArticleBookmarks
.find({ ArticleID : data["ID"], UserID : ArgsUserID, Status : 1 })
.countDocuments()
.then( (hre) =>{return (hre == 1) ? true : false; });
);
});
return lor;
});
我想在单个查询中显示带有书签的文章列表,但在子查询操作之前执行返回。asyn如何为此工作?
回答如下:尝试如下
let MainFunction = () => {
return new Promise(async (resolve, reject) => {
try {
let query = {
Status: 1,
isPublish: true
}
let sortOptions = {
TotalClapCount: -1,
ViewCount: -1
}
let Data = await Articles.find(query).sort(sortOptions).skip(offset).limit(limit).lean();
await Data.forEach(async (data) => {
let cquery = {
ArticleID: data["ID"],
UserID: ArgsUserID, Status: 1
};
let countedArticles = await ArticleBookmarks.countDocuments(cquery).lean();
data.isBookmark = (countedArticles >= 1) ? true : false;
});
resolve(Data);
} catch (error) {
console.error(error);
reject(error);
}
});
}
let Data = await MainFunction();
return Data;
注意:请根据需要在MainFunction内部传递必要的参数。
更多推荐
如何等待节点js中的子查询结果?
发布评论