如何等待getVideoCountForAuthor((完成所有异步查询?
router.get('/', function (req, res, next) {
console.log("START");
(async () => {
let uniqueAuthors = await getInfluencersForHashTags("winter", { sessionList: [TTSessions]});
uniqueAuthors = await getVideoCountForAuthor(uniqueAuthors);
})()
.then(() => {
console.log("EVERYTHING DONE");
}) ;
});
async function getVideoCountForAuthor(authors) {
return _.each(authors, async function (author, i, authors) {
let feed = await TikTokScraper.user(author.username, {number: 10, sessionList: [TTSessions]});
let authorMeta = author.authorMeta;
let videocounts = _.map(feed.collector, function (post) {
return post.playCount;
});
console.log("set videocount");
});
}
日志:
START
EVERYTHING DONE
set videocount
set videocount
set videocount
set videocount
如果你想使用lodash
,你可以使用map
而不是each
,因为map会返回一组答案(在你的情况下是空的Promises(,所以要将该场景更改为每个场景的相同场景,你可以这样做:
async function getVideoCountForAuthor(authors) {
return _.map(authors, async function (author, i, authors) {
let feed = await TikTokScraper.user(author.username, {number: 10, sessionList: [TTSessions]});
let authorMeta = author.authorMeta;
let videocounts = _.map(feed.collector, function (post) {
return post.playCount;
});
console.log("set videocount");
return author;
});
}
现在,答案将是一个Promise数组,因此您可以在getVideoCountForAuthor
或父函数中生成Promise.all。
第一种情况是:
async function getVideoCountForAuthor(authors) {
return await Promise.all(_.map(authors, async function (author, i, authors) {
let feed = await TikTokScraper.user(author.username, {number: 10, sessionList: [TTSessions]});
let authorMeta = author.authorMeta;
let videocounts = _.map(feed.collector, function (post) {
return post.playCount;
});
console.log("set videocount");
return author;
}));
}
您的输出将是:
START
set videocount
set videocount
set videocount
set videocount
EVERYTHING DONE
哇。它使用for循环。这是最好的选择吗?
async function getVideoCountForAuthor(authors) {
for (const author of authors) {
let feed = await TikTokScraper.user(author.username, {number: 10, sessionList: [TTSessions]});
let authorMeta = author.authorMeta;
let videocounts = _.map(feed.collector, function (post) {
return post.playCount;
});
//let newAuthor = author;
// uniqueAuthors[i].medianVideoCounts = median(videocounts);
console.log("set videocount");
};
}