javascript - 如何使该代码块在其后的其他代码之前完成执行?

标签 javascript async-await map-function

在移动到 (if(serviceExists===undefined)) 行之前,我一直在拼命尝试调用“Feature”模型,如下所示,但是无济于事。我认为异步等待是可行的方法,但它也没有帮助。

我尝试将第一个 if block 放入 Promise 中,并将 serviceExists 解析为 Promise 的变量,但这也不起作用。代码流只是等待 Feature.query 获取功能,然后继续执行第二个 if block ,即 (if(serviceExists === undefined))。 该 block 的执行取决于前一个 block 。流程永远不会到达“基础”检查(即第一个外部 if block 中的第一个 if block )。如何使其在进一步执行之前等待特征模型的结果?

 let clientFeatures = await ClientFeature.query("clientId")
    .eq(clientMongoId)
    .exec();

  if (clientFeatures.length > 0) {
    var serviceExists;
    clientFeatures.map(async item => {
      let existingFeature = await Feature.queryOne("id")
        .eq(item.featureId)
        .exec();
      let existingFeatureType = existingFeature.type;
      if (
        existingFeatureType === "base" &&
        reSelectedFeatureType === "base"
      ) {
        existingBaseFeatureId = existingFeature.id;
        if (existingBaseFeatureId === reSelectedFeature[0].id) {
          serviceExists = true;
        }
      }
    });
  }

  if (serviceExists === undefined) {
    var clientFeatureGen = await ClientFeature.create({
      id: uuidv1(),
      clientId: clientMongoId,
      featureId: featureMongoId
    });
  }

最佳答案

由于您在 map 中使用异步函数,因此您应该“等待”它使用 Promise.all 创建的所有 promise

查看此post了解详细信息和 CodePen 示例。

代码取自CodePen:

const arr = [ { key: 1 }, { key: 2 }, { key: 3 } ]
const results = arr.map(async (obj) => { return obj.key; });
Promise.all(results).then((completed) => document.writeln( `\nResult: ${completed}`));

关于javascript - 如何使该代码块在其后的其他代码之前完成执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54553481/

相关文章:

node.js - 运行 Mocha 测试时出现 node-mssql "connection is closed",但在应用程序中运行良好

python - 对 map 对象进行成员资格测试时出现意外结果

javascript - 如何在 Parcel Bundler 中使用类字段?

c# - HttpClient.PostAsJsonAsync 永远看不到帖子何时成功并响应

python - asyncio 错误地警告流对象被垃圾收集;显式调用 "stream.close()"

javascript - 多变量 Javascript map() 回调

c++ - 将(某种元)函数应用于一系列类型

javascript - 使用 jQuery 验证确保至少一个下拉列表具有值

javascript - JQuery 对话框中的 HTML 表不起作用

javascript - 如何使用 Express、AngularJS、Socket.io 进行广播并获取通知?