Javascript 承诺和异步函数”;借用;来自并发运行承诺的变量
我在助手函数answerUserTag中有一个Waterline异步调用:Javascript 承诺和异步函数”;借用;来自并发运行承诺的变量,javascript,node.js,asynchronous,sails.js,waterline,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,
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,并且我在helper中的theQuestion
查询后设置了一个断点,我会看到以下不合理的值:
answerObject.tag
等于5c338ae267a1983e84340388
问题.id
等于5C2727AC1E60913703F3002
当调用多个承诺时,变量之间似乎存在不合逻辑的重叠。尝试通过
Promise对其进行调试。每个()
可能?由于迭代是连续的,所以您将知道哪个承诺会困扰您
其次,如果您指定helper函数,那就太好了
第三,为什么要用?如果你检查,它清楚地说明,我引用:
不建议使用with
语句,因为它可能会导致混淆错误和兼容性问题。它具有模糊性。with
语句使得人工读者或JavaScript编译器很难决定是否在作用域链中找到非限定名称,如果是,则在哪个对象中找到
不一致的结果是因为承诺是异步解决的
这可能会有帮助:toniov.github.io/p-iteration使用Promise.each()解决了问题,因为没有错误,函数按预期运行,但我想弄清楚如何同时运行它们。OP没有使用
with
语句,他使用了一个名为.with()
的方法。这是MDN的一段引用。但是,是的,告诉我他们是否不同。你的助手是否会回报你的承诺?这可能有助于: