为什么我得到最后的承诺?

时间:2018-01-25 09:23:33

标签: node.js https promise axios

我正在努力处理所有的承诺。但我只得到了最后的承诺?我看了npm axios module.Code在那里运行:

 axios.all([f1(), f2()]).then(axios.spread(function(res1, res2) { //handle }));

我为保留承诺函数创建了名为powerPlants的新数组:

  const powerPlants = meters.map( meter => {
     const obj = {};
     params.meter = meter; //  changing parameter for post request
     obj[meter] = function(){
        return axios.post('https://power.ivyiot.com/Thingworx/Things/GamaNetworkServices/Services/GetHistoricDataByMinute',params,options);
     };    
    return obj[meter]();           });

我希望单独处理所有承诺,如下所示。但是没有工作。

 axios.all(powerPlants).then(axios.spread((a,b,c,d,e,f,g)=>{
        console.log(a); //meter parameter of a should be powertTrack2001 but it powerTrack2007 
}))

1 个答案:

答案 0 :(得分:0)

您只有一个params对象,其.meter属性正在更改 - 它以最后指定的值结束。鉴于此对象是您的承诺结果的一部分,它在任何地方都是一样的。复制params以避免这种情况:

axios.all(meters.map(meter => {
    const paramObj = Object.assign({}, params, {meter});
    return axios.post('https://power.ivyiot.com/Thingworx/Things/GamaNetworkServices/Services/GetHistoricDataByMinute', paramObj, options);
})).then(…)