【问题标题】:Why I getting the last promise?为什么我得到最后的承诺?
【发布时间】:2018-07-04 11:57:45
【问题描述】:

我正在尝试处理所有承诺。但我只得到最后一个承诺?我查看了 npm axios 模块。代码在其中运行:

 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 
}))

【问题讨论】:

  • WTH 是 objobj[meter] 方法吗?为什么不直接调用并返回axios.post()
  • 您得到的结果究竟是什么?它与预期的结果有何不同?
  • params 声明在哪里?您在循环期间不断对其进行变异。
  • 我编辑了我的问题。 @Bergi

标签: node.js https promise axios


【解决方案1】:

您只有一个 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(…)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2018-07-09
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多