javascript - 与 MongoDB 的异步 Javascript -
问题描述
我的后端有两个函数,它们基本上执行以下操作:
const function2 = async(var1, var2, var3, var4) => {
var x = await function1(var1);
console.log(x);
}
var function1 = async function (var1){
var array = [];
var1.forEach(async function(val){
try{
smallarr = await Item.find({
val:val.x
})
array.push(smallarr);
}
})
console.log(array);
return array;
}
但是,函数 2 中的日志语句在函数 1 中的日志语句之前被调用。我将从旧的 StackExchange 线程中脱离以下示例
我的代码出了什么问题?我对异步/等待不了解什么?我可以提供实际代码而不是可爱的示例,但它们是相当大的功能。
解决方案
调用没有等待,它的forEach
回调是一个返回承诺的异步函数,但那些没有等待。它的返回值将进入 void。因此,console.log(array);
在用值填充数组之前执行。
您可以通过使用正常for
循环来解决此问题。注意:try
没有 a 的 acatch
不是很有用(并且需要 a finally
),所以你可以忽略它。
for (let val of var1) {
smallarr = await Item.find({ val:val.x })
array.push(smallarr);
}
推荐阅读
- wordpress - 我的网站主页上没有链接可用
- python - 如何一一读取 RabbitMQ 队列消息
- java - 如何将 DTO 中的 ID 映射到实体上的类的 ID
- npm - 为什么我要检查 package-lock.json?
- docker - 在 CentOS7 VM 中运行超过四个 DB2 Container 会导致资源错误
- javascript - 需要帮助按日期排序数据
- rust - '恐慌!' 在使用 Json 对象并遍历字符串值时
- postgresql - 尽管删除了所有实例并重新安装了 postgresql 和 pgadmin 4,但仍无法连接服务器
- hive - Hive 创建增量文件夹和存储桶文件
- batch-file - 如何使用 IP 地址获取网络上另一台 PC 的主机名?(批处理文件)