(中间值)。则不是函数

时间:2019-05-05 15:31:25

标签: javascript ecmascript-6 ecmascript-5

我是Java的新手。 由于某些旧系统,目前我正在将一些ES6代码转换回ES5代码。 我转换了以下代码:

$row.find('.gridCellDetailAction')
 .each((i, elem) => $translate('Grid.Show' + $(elem).attr('data-title') + 's')
.then(trans => $(elem).attr('title', trans)));

对此

   $row.find('.gridCellDetailAction')
        .each(function (i, elem) {
              $translate('Grid.Show' + $(elem).attr('data-title') + 's')
   }.then(function (trans) { $(elem).attr('title', trans) }));

现在我遇到以下错误:

  

(中间值)。那么它不是一个函数

现在我知道我对then做错了。但是如何获得相同的结果?

2 个答案:

答案 0 :(得分:1)

通过一些格式化,您可以轻松看到不同之处。 一次您根据then的结果调用$translate,而另一次您对函数定义的调用then

$row.find('.gridCellDetailAction')
.each(
  (i, elem) => {
    $translate(
     'Grid.Show' + $(elem).attr('data-title') + 's'
    )
    .then(
      trans => $(elem).attr('title', trans)
    )
  }
);
$row.find('.gridCellDetailAction')
.each(
  function (i, elem) {
    $translate('Grid.Show' + $(elem).attr('data-title') + 's')
  }// <-- The error is here
  .then(
    function (trans) { 
      $(elem).attr('title', trans) 
    }
  )
);

这是正确的:

$row.find('.gridCellDetailAction')
.each(
  function (i, elem) {
    $translate('Grid.Show' + $(elem).attr('data-title') + 's')
    .then(  //Now then is called on the result of $translate
      function (trans) { 
        $(elem).attr('title', trans) 
      }
    )
  }
);

答案 1 :(得分:0)

错误之处:
从您的代码中,我将删除$row.find('.gridCellDetailAction').each();

function (i, elem) {
    $translate('Grid.Show' + $(elem).attr('data-title') + 's')
}
.then(function (trans) { $(elem).attr('title', trans) })

此代码似乎是错误的; 因此,我们需要将.then(function (trans) { $(elem).attr('title', trans) })放入function()


完整代码:

$row.find('.gridCellDetailAction')
    .each(function (i, elem) {
        $translate('Grid.Show' + $(elem).attr('data-title') + 's')
            .then(function (trans) { $(elem).attr('title', trans) });
    });