Promise和异步函数从并发运行的Promise中“借用”变量

时间:2019-01-17 13:18:02

标签: javascript node.js asynchronous sails.js waterline

我在辅助函数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(即一个诺言),则效果很好。但是,如果有两个userTagAnswers并且我在助手中的theQuestion查询之后设置了一个断点,则会看到以下不合理的值:

  

answerObject.tag等于5c338ae267a1983e84340388

     

theQuestion.id等于5c27227ac1e60913703f3002

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

2 个答案:

答案 0 :(得分:1)

尝试通过"India"进行调试?由于迭代是顺序的,因此您将知道哪个Promise在困扰您。

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

第三,为什么//*[name()="text" and text()="India"] ?如果您选中MDN - with,它会明确指出而我引用

  

不建议使用Promise.each()语句,因为它可能导致令人困惑的错误和兼容性问题。它有歧义。 with语句使人类读者或JavaScript编译器很难决定是否会在范围链中找到不合格的名称,如果找到,则会在哪个对象中找到

答案 1 :(得分:0)

不一致的结果是因为Promise正在解决异步问题

这可能会有所帮助:toniov.github.io/p-iteration