我在辅助函数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时,变量之间似乎存在不合逻辑的重叠。
答案 0 :(得分:1)
尝试通过"India"
进行调试?由于迭代是顺序的,因此您将知道哪个Promise在困扰您。
第二,如果您指定了辅助函数,那就太好了。
第三,为什么//*[name()="text" and text()="India"]
?如果您选中MDN - with,它会明确指出而我引用:
不建议使用
。Promise.each()
语句,因为它可能导致令人困惑的错误和兼容性问题。它有歧义。with
语句使人类读者或JavaScript编译器很难决定是否会在范围链中找到不合格的名称,如果找到,则会在哪个对象中找到
答案 1 :(得分:0)
不一致的结果是因为Promise正在解决异步问题
这可能会有所帮助:toniov.github.io/p-iteration