Javascript承诺和功能:得到错误

时间:2018-02-02 16:23:27

标签: javascript promise es6-promise

我无法理解为什么Firefox说:" TypeError:fadeIn_1(...)未定义" 和Chrome说" Uncaught TypeError:无法读取属性'然后'未定义"使用此代码:



function fadeIn_1(cpt) {
  cpt = cpt + step;
  if (cpt < 500) {
    console.log("cpt = " + cpt);
    setTimeout(function() {
      fadeIn_1(cpt);
    }, ticks);
  } else {
    console.log("cpt = " + cpt);
    return new Promise(function(resolve, reject) {
      resolve("Succeed");
      console.log("THE END. Ticks = " + ticks);
    });
  }
}

var cpt = 1;
var step = 10;
var TimeDuration = 500; // ms
var ticks = 15; // Duration.

fadeIn_1(cpt).then(function() {
  console.log('Promise executed !');
});
&#13;
&#13;
&#13;

我想要的结果:&#34;承诺执行&#34;在控制台中。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您应该始终确保您的功能具有一致的回报。在这种情况下,您的函数要么返回一个promise,要么返回undefined。让它总是通过promisifying setTimeout返回一个承诺。

function promisifiedSetTimeout(delay) {
  return new Promise(function(resolve) {
    setTimeout(resolve, delay);
  });
}
function fadeIn_1(cpt) {
  cpt = cpt + step;
  if (cpt < 500) {
    console.log("cpt = " + cpt);
    return promisifiedSetTimeout(ticks).then(function() {
      return fadeIn_1(cpt);
    });
  } else {
    console.log("cpt = " + cpt);
    console.log("THE END. Ticks = " + ticks);
    return Promise.resolve("Succeed");
  }
}

var cpt = 1;
var step = 10;
var TimeDuration = 500; // ms
var ticks = 15; // Duration.

fadeIn_1(cpt).then(function() {
  console.log('Promise executed !');
});

因为我们将fadeIn_1的下一次通话发送到超时的.then,所以它会进一步延迟原始.then,直到它们全部完成。