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这样做,它给你的数组将按照你给它的承诺的顺序,无论它们解决的顺序如何).但我猜你的“数字”实际上是一个更有趣的占位符.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...