首页 > 解决方案 > 与 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 线程中脱离以下示例

示例截图

我的代码出了什么问题?我对异步/等待不了解什么?我可以提供实际代码而不是可爱的示例,但它们是相当大的功能。

标签: javascriptmongodbasync-awaitasync.js

解决方案


调用没有等待,它的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);
}

推荐阅读