2016-11-18 7 views
1

私は約束関数を発電機関数に変換しようとしていますが、これを達成するために少し苦労しています。約束事を発電機に変換しようとしています

私は私のコンソールログにこれを得続ける:

var myGen {[[GeneratorStatus]]: "suspended"} 

私は約束としてそれを書いたとき、それはこのように見えた:

function maxYvalue2() { 

    return Rpt_scn_cost_v.find({filter: { where: {scenario_id: $stateParams.id}}}).$promise.then(function(response){ 
     var maxYvalue = 0; 
     var currMaxYvalue = 0; 
     for (var i=0;i<response.length;i++) { 
      var currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost); 
      if (currMaxYvalue > maxYvalue) { 
       maxYvalue = currMaxYvalue; 
      }; 
     } 
     return maxYvalue; 
    }); 

}; 


maxYvalue2().then(function(maxYvalue) { 


    var mxY = maxYvalue 

    console.log('var', mxY) 




    $scope.options_scn_cst = { 
      chart: { 
       type: 'lineChart', 
       height: 450, 
       margin : { 
        top: 20, 
        right: 20, 
        bottom: 40, 
        left: 55 
       }, 
       x: function(d){ return d.x; }, 
       y: function(d){ return d.y; }, 
       useInteractiveGuideline: true, 
       dispatch: { 
        stateChange: function(e){ console.log("stateChange"); }, 
        changeState: function(e){ console.log("changeState"); }, 
        tooltipShow: function(e){ console.log("tooltipShow"); }, 
        tooltipHide: function(e){ console.log("tooltipHide"); } 
       }, 
       xAxis: { 
        axisLabel: '', 
        tickFormat: function(d) { return d3.time.format('%b %y')(new Date(d)); } 
       }, 
       yDomain: [0, mxY], // <============ I then set mxY here in the $scope object 
       yAxis: { 
        axisLabel: '$/month', 
        tickFormat: function(d){ 
         return d3.format('$,.0f')(d); 
        }, 
        axisLabelDistance: -10 
       }, 
       callback: function(chart){} 
      }, 
      title: { 
       enable: true, 
       text: 'Scenario Costs Over Time' 
      }, 
      subtitle: { 
       enable: false, 
       text: 'Put your Subtitle here.', 
       css: { 
        'text-align': 'center', 
        'margin': '10px 13px 0px 7px' 
       } 
      }, 
      caption: { 
       enable: false, 
       html: 'Put your Caption Here.', 
       css: { 
        'text-align': 'justify', 
        'margin': '10px 13px 0px 7px' 
       } 
      } 
     }; 

    //console.log($scope.data_scn_cst); 
}); 

し、私のように再書き込みしてみました

var myGen = function*() { 

    var maxYvalue = 0; 
    var currMaxYvalue = 0; 

    var response = yield Rpt_scn_cost_v.find({filter: { where: {scenario_id: $stateParams.id}}}); 

    for (var i=0;i<response.length;i++) { 
     var currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost); 
     if (currMaxYvalue > maxYvalue) { 
      maxYvalue = currMaxYvalue; 
     }; 
    } 

}; 

var mxY = myGen(); 

console.log(mxY.next(1)); 



console.log('var', mxY) 




$scope.options_scn_cst = { 
     chart: { 
      type: 'lineChart', 
      height: 450, 
      margin : { 
       top: 20, 
       right: 20, 
       bottom: 40, 
       left: 55 
      }, 
      x: function(d){ return d.x; }, 
      y: function(d){ return d.y; }, 
      useInteractiveGuideline: true, 
      dispatch: { 
       stateChange: function(e){ console.log("stateChange"); }, 
       changeState: function(e){ console.log("changeState"); }, 
       tooltipShow: function(e){ console.log("tooltipShow"); }, 
       tooltipHide: function(e){ console.log("tooltipHide"); } 
      }, 
      xAxis: { 
       axisLabel: '', 
       tickFormat: function(d) { return d3.time.format('%b %y')(new Date(d)); } 
      }, 
      yDomain: [0, mxY], // <============ I then set mxY here in the $scope object 
      yAxis: { 
       axisLabel: '$/month', 
       tickFormat: function(d){ 
        return d3.format('$,.0f')(d); 
       }, 
       axisLabelDistance: -10 
      }, 
      callback: function(chart){} 
     }, 
     title: { 
      enable: true, 
      text: 'Scenario Costs Over Time' 
     }, 
     subtitle: { 
      enable: false, 
      text: 'Put your Subtitle here.', 
      css: { 
       'text-align': 'center', 
       'margin': '10px 13px 0px 7px' 
      } 
     }, 
     caption: { 
      enable: false, 
      html: 'Put your Caption Here.', 
      css: { 
       'text-align': 'justify', 
       'margin': '10px 13px 0px 7px' 
      } 
     } 
    }; 
+0

あなたがしようとしていることは意味をなさない。ジェネレータは、約束とはまったく異なるものです。 – Bergi

答えて

1

ジェネレータは、約束を置き換えるものではありません。

あなたの構文を簡素化し、then呼び出しを避けるため、(おそらくトランス­パイラーで)async/awaitを使用したい場合。実行はまだ非同期ですが、変更する方法はありません。あなたが現在持っている、そしてそれはまだ約束を返すので、あなたはまったく同じ方法でそれを呼びたいfunction maxYvalue2とまったく同じです

async function maxYvalue2() { 
    var response = await Rpt_scn_cost_v.find({filter: { where: {scenario_id: $stateParams.id}}}).$promise; 
//     ^^^^^ 
    var maxYvalue = 0; 
    var currMaxYvalue = 0; 
    for (var i=0;i<response.length;i++) { 
     var currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost); 
     if (currMaxYvalue > maxYvalue) { 
      maxYvalue = currMaxYvalue; 
     }; 
    } 
    return maxYvalue; 
} 

を記述します。

関連する問題