微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Promises数组,传递创建时使用的变量

使用Express,我使用.map创建一个API调用数组,其结果我想组合成一个响应对象.由于每个调用使用不同的查询参数,我想使用查询参数作为响应对象的键.

我使用axios创建GET请求,它返回一个promise,然后我使用axios.all等待所有的promises解析.

问题是,在承诺解决之后,我不再能够访问用于创建它们的变量.如何将这些变量附加到承诺中供以后参考?

这是API:

router.get('/api',(req,res) => {
  const number = req.query.number;
  res.json({ content: "Result for " + number });
});

这是我试图结合结果的地方:

router.get('/array',async (req,res) => {
  res.locals.payload = {};
  const arr = [1,2,3,4,5];
  const promises = arr.map(number => {
    return axiosInstance.get('/api',{ params: { number: number } })
  });
  const results = await axios.all(promises);
  results.map(r => {
    // number should match original,but I no longer have
    // access to the original variable
    number = 1;
    res.locals.payload[number] = r.data;
  });
  res.json(res.locals.payload);
});

GET on / array的结果:

{
    "1": {
        "content": "Result for 5"
    }
}

创建Promise对象以保存密钥时,我该怎么办?

解决方法

如果结果将是一个基于0的索引而不是具有属性“1”,“2”等的对象的数组,我们可以使用Promise.all(或axios.all,如果它提供相同的保证)来解决它Promise.all这样做,它给你的数组将按照你给它的承诺的顺序,无论它们解决的顺序如何).但我猜你的“数字”实际上是一个更有趣的占位符.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐