javascript - 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 时,变量之间似乎存在不合逻辑的重叠。
解决方案
尝试通过Promise.each()
也许调试它?由于迭代是连续的,你会知道哪个 Promise 困扰着你。
其次,如果您指定辅助函数,那就太好了。
第三,为什么with
?如果您检查MDN - with,它清楚地说明并引用:
不建议使用该
with
语句,因为它可能是令人困惑的错误和兼容性问题的根源。它有歧义相反。该with
语句使人类读者或 JavaScript 编译器难以确定是否会在作用域链中找到非限定名称,如果是,则在哪个对象中找到。
推荐阅读
- python - 在 Databricks 中重命名 Spark 数据框列 Python
- c# - c# 如何从 'iTextSharp.text.pdf.PdfArray' 转换为 'iTextSharp.text.pdf.PRIndirectReference'
- javascript - 如何根据选择框中的选定元素转换d3图表的数据?
- python - Python Turtle:尝试通过 poly 函数为我的海龟设置自定义形状
- jupyter-notebook - 如何在 Jupyter Notebook 中获取输出历史记录?
- r - 当在 R Shiny 中使用带有可选用户输入的 Reactive 函数时,为什么在没有用户输入时反应基础对象会减少?
- html - 如何在下拉菜单顶部移动 3 个热门国家
- javascript - 无法在 Heroku 上的 Rails 应用程序中构建 Ember.js 应用程序
- centos - 谁能知道“vggbase-lv_opt”是什么?
- icalendar - 未使用 ICS 文件向提及的组织者邮件显示通知