javascript - 在 node.js 中以正确的顺序运行代码
问题描述
我正在制作一个根据用户兴趣编译文章的网站。而且我有一个后端,但我无法让代码以正确的顺序运行,基本上我有一个包含用户的 MongoDB 数据库,每个用户都有一封电子邮件和一系列兴趣。代码首先遍历用户,然后遍历兴趣并添加一定数量的文章来为每个兴趣推荐。但是我需要在循环完所有兴趣后将这些数据返回给客户端,但我找不到这样做的方法。代码:
//? Get user emails and intrests
UsersReference.find({}).toArray(function (err, users) {
for (var i = 0; i < users.length; i++) {
const user = users[i]
//? Generate a text blurb for user based off there intresets
var limit = 10 / user.intrests.length
for (var j = 0;j < user.intrests.length;j++) {
axios({
"method": "POST",
"url": "https://tidalwaves-news-analytics2.p.rapidapi.com/articles?limit=" + limit,
"headers": {
"x-rapidapi-host": "tidalwaves-news-analytics2.p.rapidapi.com",
"x-rapidapi-key": "SECRET",
"useQueryString": true
},
"data": {
"url": {
"query": user.intrests[j]
},
}
}).then((res) => {
for(var l =0;l < res.data.data.length;l++) {
blurbs[i] = blurbs[i] + ". " + res.data.data[l].title
}
}).catch((err) => {
console.log(err)
})
}
}
解决方案
您可以将逻辑包装在函数中并使用关键字,而不是使用then()
等待承诺履行。async
await
这将使您的代码更易于阅读,并且可以解决您的问题。
例子:
async function myFunction() {
for (const item of items) {
const result = await axios({...});
// Do something with `result`....
}
}
推荐阅读
- javascript - mongoose findOne() 函数未返回指定的项目
- php - PHP数组总和值
- ios - UIViewPropertyAnimator 重复
- jwt - 将过期的令牌放入黑名单表是个好主意吗?
- node.js - 使用快速后端在反应客户端中使用 jwt 令牌设置 cookie
- python - PyQt5 中的计时器范围问题
- python - Flask SQLalchemy 过滤整数列表
- excel - 将文件夹名称存储到数组中并按字母顺序排序 VBA
- rust - Rust 宏错误:局部歧义:多个解析选项
- google-cloud-platform - 禁用混合合作伙伴互连的 GCP 错误