【问题标题】:Javascript promise and function : getting errorJavascript 承诺和功能:出现错误
【发布时间】:2018-02-03 01:19:28
【问题描述】:

我不明白为什么 Firefox 说:“TypeError: fadeIn_1(...) is undefined” 并且 Chrome 使用此代码说“未捕获的类型错误:无法读取未定义的属性 'then'”:

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 !');
});

我想要的结果:控制台中的“承诺执行”。

提前感谢您的帮助

【问题讨论】:

  • cpt &lt; 500 时你没有返回承诺。
  • 确实如此,但初始值为500,并且每次都会添加。我无法用这些值重现错误。
  • 我收回了。该错误显示在真实控制台中,但不是 Stack Snippet 控制台模拟器。
  • 我不知道我从哪里得到初始值为500的想法。它没有使用TimeDuration。问题正如@DanielA.White 所说。由于您以cpt = 1 开头,因此它采用第一个if 分支并且不返回承诺。
  • 你是对的,TimeDuration 是不需要的。但是当 cpt > 500 时,console.log 显示“THE END.Ticks =” + ticks;但是没有resolve()...

标签: javascript promise es6-promise


【解决方案1】:

您应该始终确保您的函数具有一致的返回。在这种情况下,您的函数要么返回一个承诺,要么返回未定义。让我们通过承诺 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,直到它们全部完成。

【讨论】:

  • 它有效!非常感谢您的所有回答。
猜你喜欢
  • 1970-01-01
  • 2020-01-13
  • 2014-10-29
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多