Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺和异步函数”;借用;来自并发运行承诺的变量_Javascript_Node.js_Asynchronous_Sails.js_Waterline - Fatal编程技术网

Javascript 承诺和异步函数”;借用;来自并发运行承诺的变量

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,

我在助手函数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,并且我在helper中的
theQuestion
查询后设置了一个断点,我会看到以下不合理的值:

answerObject.tag
等于
5c338ae267a1983e84340388

问题.id
等于
5C2727AC1E60913703F3002


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

尝试通过
Promise对其进行调试。每个()
可能?由于迭代是连续的,所以您将知道哪个承诺会困扰您

其次,如果您指定helper函数,那就太好了

第三,为什么要用?如果你检查,它清楚地说明,我引用:

不建议使用
with
语句,因为它可能会导致混淆错误和兼容性问题。它具有模糊性。
with
语句使得人工读者或JavaScript编译器很难决定是否在作用域链中找到非限定名称,如果是,则在哪个对象中找到


不一致的结果是因为承诺是异步解决的


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

使用Promise.each()解决了问题,因为没有错误,函数按预期运行,但我想弄清楚如何同时运行它们。OP没有使用
with
语句,他使用了一个名为
.with()
的方法。这是MDN的一段引用。但是,是的,告诉我他们是否不同。你的助手是否会回报你的承诺?这可能有助于: