首页 > 解决方案 > Promise 和异步函数从并发运行的 Promise 中“借用”变量

问题描述

我在辅助函数 answerUserTag 中有这个 Waterline 异步调用:

theQuestion = await UserTag.findOne({id: answerObject.tag});

这就是我调用上述助手的方式:

const promises = userTagAnswers.map(userTagAnswer =>
  sails.helpers.answerUserTag.with(
    {
      userTagAnswer: userTagAnswer,
      answeringUserId: inputs.userId,
      userType: inputs.userType
    }));

await Promise.all(promises);

如果只有一个 userTagAnswers(即一个 promise),它就可以正常工作。但是如果有两个 userTagAnswers 并且我theQuestion在帮助程序中的查询之后设置了一个断点,我会看到以下不合理的值:

answerObject.tag等于5c338ae267a1983e84340388

theQuestion.id等于5c27227ac1e60913703f3002

当调用多个 Promise 时,变量之间似乎存在不合逻辑的重叠。

标签: javascriptnode.jsasynchronoussails.jswaterline

解决方案


尝试通过Promise.each()也许调试它?由于迭代是连续的,你会知道哪个 Promise 困扰着你。

其次,如果您指定辅助函数,那就太好了。

第三,为什么with?如果您检查MDN - with,它清楚地说明并引用

不建议使用该with语句,因为它可能是令人困惑的错误和兼容性问题的根源。它有歧义相反。该with语句使人类读者或 JavaScript 编译器难以确定是否会在作用域链中找到非限定名称,如果是,则在哪个对象中找到。


推荐阅读